您的位置:首页 > 运维架构

Hibernate与TopLink在主键自动生成策略上的差异

2009-03-18 14:13 447 查看
环境:JDK1.6+NetBeans6.5+MySQL5.1

实体类包含主键字段ID:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

配置PersistenceUnit的时候,如果选用TopLink作为JPA实现:

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="GuestBook-ejbPU" transaction-type="JTA">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<jta-data-source>jdbc/guestbook_datasource</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="toplink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>

将会生成User表和一个Sequence表,负责生成ID。此时就可以直接插入数据了。

但是如果使用Hibernare作为JPA的实现:

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="GuestBook-ejbPU" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/guestbook_datasource</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
只会生成一个User表。如果直接插入数据则会报主键的错误。此时需要做两件事:

1.在MySQL中给ID设置一个DefaultValue

2.将ID字段设置为自增autoIncrease

ps:TopLink貌似更好用一些
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: