我正在使用带有spring的hibernate 3.5.0 final。在此我想将数据保存到一个表中,该表具有与其他三个表关联的复合键。我使用了hibernateTemplate.save()。但是当我看到日志时它清楚地表明在每次插入之前都有一个选择发生。我无法确定原因。
请帮忙!
映射:
<hibernate-mapping>
<class name="class1" table="EVENT_ASSET_DISPOSITION">
<composite-id name="id" class="Idclass">
<key-property name="pk1" type="java.math.BigInteger">
<column name="PK_1" precision="38" scale="0" not-null="true"/>
</key-property>
<key-property name="pk2" type="long">
<column name="PK_2" not-null="true" />
</key-property>
<key-property name="pk3" type="long">
<column name="PK_3" precision="38" scale="0" not-null="true"/>
</key-property>
</composite-id>
<property name="column1" type="java.math.BigDecimal" generated="insert">
<column name="COLUMN_1" precision="38" scale="0" />
</property>
</hibernate-mapping>
SQL: -
[STDOUT](pool-14-thread-1)插入TABLE_1(COLUMN_1,PK_1,PK_2,PK_3)值(?,?,?,?,) 2011-02-14 08:28:30,312 INFO [STDOUT](pool-14-thread-1)Hibernate:从table_1中选择table1_.COLUMN_1作为COLUMN1_280_作为table1_,其中table1_.PK_1 =?和table1_.PK_2 =?和table1_.PK_3 =?
干杯, Dwarak
答案 0 :(得分:0)
hibernate用于确定对象是否是瞬态的一种机制是版本控制
如果向映射/对象添加版本列,它应该解决问题
<version name="version" column="version" type="integer" unsaved-value="undefined"/>
编辑1:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-version
@see 5.1.9
答案 1 :(得分:0)
日志显示在select
之后发出insert
。这是因为column1
被声明为generated="insert"
这一事实,因此Hibernate需要在insert
之后获取该列的生成值。
另见: