刚开始用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,是否再添加注解我就不会了。