Java持久化规范,是从EJB2.x以前的实体Bean(Entity bean)分离出来的,EJB3以后不再有实体bean,而是将实体bean放到JPA中实现。JPA是sun提出的一个对象持久化规范,各JavaEE应用服务器自主选择具体实现,JPA的设计者是Hibernate框架的作者, 它吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。使用JPA持久化对象,并不是依赖于某一个ORM框架。因此Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实现而不必改动太多代码。
Hibernate作为JPA的一种实现,jpa的注解已经是hibernate的核心,hibernate只提供了一些补充,而不是两套注解。hibernate对jpa的支持够足量,在使用hibernate注解建议使用jpa。
根据JPA规范要求,在实体bean应用中,需要在应用类路径(classpath)的META-INF目录下加入持久化配置文件——persistence.xml,该文件就是持久化策略文件。其内容如下:
<?xml version="1.0" encoding="UTF-8"?> <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="持久化单元名" transaction-type="JTA"> <jta-data-source>使用JCA部署在javaEE服务器上的数据源JNDI</jta-data-source> <!--指定JPA实现提供者,不指定就采用JavaEE服务器默认的JPA提供者,这里以 OpenJPA为例--> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <class>实体bean全路径名</class> …… <properties> <!--配置JPA实现提供者的一些信息--> </properties> </persistence-unit> </persistence>
@Id @Column(name=”列名”) @GeneratedValue(Strategy=GenerationType.Auto) private int id;
注意:@Id和@GeneratedValue两个注解必须同时使用,标识了注解之后,要主键的生成策略。
(5).Bean的其他属性使用”@Column(name=列名)”注解,指定该属性映射到数据库表中的列名,如果不指定在JPA实现会自动生成默认的列名。
(6).实体Bean必须严格遵循JavaBean的规范,提供无参的默认构造方法,属性提供set和get方法。
(7).最好重写hashcode()和equals()方法,实体bean的唯一标识是主键,因此,使用实体bean的主键来比较。
@GeneratedValue(generator=”UUID主键生成策略”) @GenericGenerator(name=” UUID主键生成策略”, strategy=”uuid”)
还有多种关联映射关系,我已在另一篇文章中做过总结:JPA几种关联映射