一) 创建实体Bean:
public class Person {
/**
* 编号
*/
private Integer id;
/**
* 姓名
*/
private String name;
//...get/set方法...
}
以上是普通的Java Bean,如果要用JPA来管理Java Bean就要加上JPA的一些注解。
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
/**
* 编号
*/
@Id
private Integer id;
/**
* 姓名
*/
private String name;
//...get/set方法...
}
注解解析:Person类前面用javax.persistence.Entity注解,以javax为开头的包,是sun公司制定的一些规范,而在Hibernate中也提供了org.hibernate.annotations.Entity注解,JPA实体的注解要选javax.persistence.Entity。@Id注解:在属性上标识,也可以在属性对应的get方法上标识,如
@Id
public Integer getId()用来标志实体的唯一标识。
JPA实体主键生成策略,在不同数据库中有些是不支持的:
1)
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
自动选择一个最适合底层数据库的主键生成策略。如MySQL会自动对应auto increment。这个是默认选项,即如果只写@GeneratedValue,等价于@GeneratedValue(strategy=GenerationType.AUTO)。
2)
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
表自增长字段,Oracle不支持这种方式(MySQL数据库支持)。
3)
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
通过序列产生主键,MySQL不支持这种方式(Oracle数据库支持)。
4)
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。不同的JPA实现商生成的表名是不同的,如 OpenJPA生成openjpa_sequence_table表,Hibernate生成一个hibernate_sequences表,而TopLink则生成sequence表。这些表都具有一个序列名和对应值两个字段,如SEQ_NAME和SEQ_COUNT。
在我们的应用中,一般选用@GeneratedValue(strategy=GenerationType.AUTO)这种方式,自动选择主
键生成策略,以适应不同的数据库移植。
在此例中用的是MySQL数据库,用自动选择的主键生成策略。
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
/**
* 编号
*/
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
/**
* 姓名
*/
private String name;
//...get/set方法...
}
二)在类路径的META-INF目录下放置persistence.xml填写相关信息
三)编写单元测试
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class PersonTest {
public static void main(String[] args) {
//sample是persistence.xml中
//persistence-unit标签name名称
EntityManagerFactory factory = Persistence.createEntityManagerFactory("sample");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
em.persist(new Person("JPA测试"));
em.getTransaction().commit();
em.close();
factory.close();
}
}
可以看到,在MySQL数据库中创建了person表,主键为id是自增长类型。添加的记录为:id:1;name:JPA测试。
分享到:
相关推荐
04_JPA详解_第一个JPA实例与JPA主键生成策略.zip
总结一下关于JPA的主键生成策略,JPA是用@GeneratedValue标记来注释的。一般的我把主键生成分成两大类。第一个就是简单的单字段主键类型,一个就是复杂的复合主键类型。我们分2种情况分别讨论。 第一种单字段主键...
04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第4讲 第一个JPA实例与JPA主键生成策略.avi
NULL 博文链接:https://1028826685.iteye.com/blog/1523349
JPA主键策略(针对数据库自增字段重置后无效检查项) JPA主键生成策略会影响数据库自增字段的重置
持久化类主键生成策略+例子 jpa 4种 hibernate 13种
本资源为原创. 其中剖析了hibernate+JPA对主键的生成方式的分类,以及在真实项目中如何使用,并且剖析各种数据库间的主键序列(sequence)原理以及使用.
JPA视频_Table主键生成策略 · 7. JPA视频_EntityManager(1) · 8. JPA视频_EntityManager(2) · 9. JPA视频_EntityManager(3) · 10. JPA视频_EntityManager(4) · 11. JPA视频_EntityTransaction · 12. ...
基于JPA的Demo,包含关联(一对多等等),继承,主键(组合主键,主键生成策略),注解,基本类型的实现。
29.1主键生成策略 29.2 复合主键 29.3嵌入式主键 29.4 一对一关系的配置和使用 29.5 多对一和一对多关系的配置和使用 29.6 多对多的关系 29.7 把查询的多个值封装成对象 29.8 批量更新和删除 29.9 使用存储过程 29....
5、新增实体主键生成策略,可以配置手动生成主键也可以配置自动生成主键。 6、可以根据选择的标准模板不同自动生成相应扩展名的文件,也可以手动设置文件扩展名。 7、新增设置文件注释,并可以使用部分系统参数。...
10.4.4 映射实体类的主键 398 10.5 关联关系映射 402 10.5.1 单向N-1关联 403 10.5.2 单向1-1关联 406 10.5.3 单向1-N关联 409 10.5.4 单向N-N关联 411 10.5.5 双向1-1关联 414 10.5.6 双向1-N关联 417 10.5.7...
* name 表示该表主键生成策略名称,它被引用在@GeneratedValue中设置的“gernerator”值中 * sequenceName 表示生成策略用到的数据库序列名称。 * initialValue 表示主键初始值,默认为0. * allocationSize 每次主键...
1.4.4 Hibernate、EJB 3和JPA简介 1.5 小结 第2章 启动项目 2.1 启动Hibernate项目 2.1.1 选择开发过程 2.1.2 建立项目 2.1.3 Hibernate配置和启动 2.1.4 运行和测试应用程序 2.2...
11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall...
11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall...
@Id 注解可将实体Bean中某个属性定义为主键,使用@GenerateValue注解可以定义该标识符的生成策略。 • AUTO - 可以是 identity column, sequence 或者 table 类型,取决于不同底层的数据库 • TABLE - 使用table...