当前位置: 首页 > 面试题库 >

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

漆雕硕
2023-03-14
问题内容

因此,我只是站了一个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”,然后通过电线发送它们。关于我在做什么错的任何想法吗?


问题答案:

您必须记住,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>


 类似资料:
  • 问题内容: 我有一个使用hibernate和注解的j2ee应用程序。我如何注释我的pojo类中的Id字段以将其设置为自动增量或自动生成。在添加bean时,我是否将该字段留在bean中为null? 问题答案: 并在保留时将其保留为()。(如果使用/ 包装器) 在某些情况下,该策略被解析为to 或to ,因此您可能需要手动将其设置为or (取决于基础数据库)。 似乎 + 指定序列名称 对您有用。

  • 问题内容: 能否请您告诉我,我如何才能很好地为Hibernate实体启用Spring自动装配? 假设我有一个实体,并希望在那里有邮件发送者: 有没有比做的更好的方法 在我的DAO中? 谢谢! 问题答案: 有可能的!(这是Spring Roo中的默认样式!) 您所需要做的就是将@Configurable批注添加到您的实体。在配置中并使用AspectJ编织激活注释。 Spring参考中有一章:7.8.

  • 我在实体中有以下Id描述: 生成此id的分解指令如下: 此外,我还有一些分解脚本,可以在此表中插入预定义的值,例如。 当我尝试使用Jpa存储库插入没有id的新记录时,问题出现了。我收到了一条类似“重复id”的错误消息。所以,我知道jpa(hibernate)不使用postgresql序列来获取新的id值。我不想在实体的id描述中包含序列名。我希望postgresql本身能够解决这种情况。我不会使用

  • 问题内容: 我的架构看起来像这样: 我已经在同一数据库中创建了counters集合,并添加了一个带有’entityId’的_id的页面。从这里我不确定如何使用猫鼬来更新该页面并获取递增编号。 没有计数器的架构,我希望它保持这种状态,因为这实际上不是应用程序使用的实体。仅应在模式中使用它来自动递增字段。 问题答案: 这是一个示例,如何在Mongoose中实现自动增量字段:

  • 本文向大家介绍MySql数据库自动递增值问题,包括了MySql数据库自动递增值问题的使用技巧和注意事项,需要的朋友参考一下 在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成。MySQL支持多种数据表,每种数据表的自增属性都有差异,这里将介绍各种数据表里的数据列自增属性。 ISAM表 如果把一个NULL插入到一个AUTO_INC

  • 问题内容: 我已经使用Seam 2.2.1和MySQL编写了一个正在运行的应用程序。我现在尝试将应用程序连接到 Informix, 并且当我从 hibernate ()执行查询时,出现以下异常: org.hibernate.exception.genericjdbcexception无法执行查询 当我执行查询时,执行成功。 生成的sql是 选择前2个user0_.USER_ID作为USER1_12