zoukankan      html  css  js  c++  java
  • hibernate的ERROR: Duplicate entry '1' for key 'PRIMARY'

    刚开始用hibernate,做了两个例子。

    第一个是hibernate基本的配置hibernate.cfg.xml —>*.hbm.xml...

    Hibernate: insert into user (id, name, password, say) values (null, ?, ?, ?)

    第二个是hibernate的annotation的基本基本配置就是hibernate.cfg.xml —>实体类中加注解@entity...

    Hibernate: insert into Teacher (name, password, say, id) values (?, ?, ?, ?)

    然后执行第一遍 两个例子都顺利通过,当执行第二遍时候

    第一个例子没有问题,第二个例子出现了ERROR: Duplicate entry '1' for key 'PRIMARY'问题。

    问题的大概意思是说:数据库的主键id 重复了。

    因为id我设成主键并且自增长,所以我把id的传值取消掉。问题得到了解决。

    可我不知道 为什么第一个类子传重复id并且却没问题,在annotation中却会有ERROR: Duplicate entry '1' for key 'PRIMARY'问题存在?

    看了看hibernate生成的sql语句我们发现 第一个例子id传值是null,而第二个例子id是传的 ?。

    问题应该就出现在 id的配置上,第一个例子*.hbm.xml我们用了generator class="native"。

    <class name="User" table="user">
    <id name="id" column="id">
    <!-- <generator class="native"></generator> -->
    </id>

    native由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。

    所以第一个例子就不存在主键问题,第二个例子的id让它变空就解决问题了。

    其他方法,第二个例子的@id,是否再添加注解我就不会了。

  • 相关阅读:
    hdu 5053 the Sum of Cube
    [LeetCode] Word Pattern
    [LeetCode] Minimum Depth of Binary Tree
    [C++] std::vector
    [LeetCode] Count Binary Substrings
    [LeetCode] Degree of an Array
    [LeetCode] String to Integer (atoi)
    [LintCode] 比较字符串
    [LeetCode] Valid Parentheses
    [LeetCode] Perfect Number
  • 原文地址:https://www.cnblogs.com/suntutu/p/2920443.html
Copyright © 2011-2022 走看看