为hibernateTemplate.save()选择Query Run

时间:2011-02-14 12:30:38

标签: hibernate spring orm java-ee

我正在使用带有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

2 个答案:

答案 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之后获取该列的生成值。

另见: