自动递增 ID MYSQL 5 的 hibernate 问题

标签 hibernate 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

insert into contact (title, first_name, middle_name, last_name, suffix, job_title, dob, passport_number, passport_expiration, employer, dietary_restrictions, secondary_contact_fname, secondary_contact_lname, secondary_contact_mname, secondary_contact_title, secondary_contact_suffix, secondary_contact_job_title, emergency_contact_name, emergency_contact_phone, emergency_contact_notes, is_company) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

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

org.hibernate.AssertionFailure: null id in org.XXXXXXX.Contact entry(发生异常后不刷新Session)

我已经尝试将未保存的值设置为“0”和“-1”并通过网络发送它们。关于我做错了什么的任何想法?

最佳答案

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

各种生成器的解释:

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>

关于自动递增 ID MYSQL 5 的 hibernate 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1838520/

相关文章:

java - 如何在 hql 查询中传递列表,其中列表是 map 的值

hibernate - Grails sessonFactory在 Controller 中为null

java - Hibernate注释@OnetoOne似乎并没有限制数据库中的多对一条目

php - 几个模拟连接对数据库的影响

Mysql - 合并具有唯一值的行 - 对它们进行分组和计数

java - 子选择在 hibernate 条件

java - 多模式 DDL 外键生成不适用于 Hibernate

mysql - 无法在 Windows 7 上获得到 MySql 的多个连接

php - 如果键相同,如何将值附加到数组中

mysql - 合并两个查看不同表的 MySQL 查询以并排计数