一尘不染

自动递增ID MYSQL 5的休眠问题

mysql

因此,我只是站了一个Spring Hibernate应用程序,似乎无法正确映射文件。我正在使用MySql 5和一个自动递增键。这是我的映射文件的ID部分。

<hibernate-mapping>
     <class name="org.XXXXXXX.Contact" table="contact">
        <id name="id" column="id" type="int" unsaved-value="null">
            <generator class="native" />
        </id>

这是生成的SQL

插入联系人(标题,名字,中间名,姓,后缀,职务,职位,护照号码,护照过期,雇主,饮食限制,secondary_contact_fname,secondary_contact_lname,secondary_contact_mname,secondary_contact_title,secondary_contact_suffix,secondary_contact_jobs标题,紧急联系人姓名,紧急联系人姓名,紧急联系人姓名)
,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)

这是堆栈跟踪的重要部分:

org.hibernate.AssertionFailure:org.XXXXXXX.Contact条目中的id为null(发生异常后不要刷新Session)

我尝试将未保存的值设置为“ 0”和“ -1”,然后通过电线发送它们。关于我在做什么错的任何想法吗?


阅读 258

收藏
2020-05-17

共1个答案

一尘不染

您必须记住,Hibernate是一个持久层,并且需要能够跟踪对象在数据库中的位置。因此,当执行插入操作时,它实际上将需要查询自动递增计数器以查看下一个ID应该是什么。然后,将ID插入对象,然后将对象插入数据库。因此,要让hibernate进行插入操作,它首先需要进行选择(除非您使用的是应用程序生成的某种GUID)。当使用mySQL自动增量时,请使用“身份”生成器。

各种生成器的说明:

http://www.roseindia.net/hibernate/hibernateidgeneratorelement.shtml

hibernate的XML代码段:

 <id name="id" type="long" unsaved-value="null" >
    <column name="uid" not-null="true"/>
    <generator class="identity"/>
 </id>
2020-05-17