一) 创建实体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主键生成策略的详细教程。 ### JPA基础 1. **JPA简介**: JPA是Java EE的一部分,它提供了一套规范,...
### JPA主键生成策略详解 #### 一、概述 持久化对象的主键生成机制在JPA(Java Persistence API)中占据着重要的位置。它不仅关乎数据的唯一标识符如何确定,还与数据的存储效率及应用逻辑紧密相关。JPA通过`@...
**JPA主键生成策略** JPA提供了多种主键生成策略,以下是一些常见的策略: 1. **IDENTITY**:数据库负责生成主键,如MySQL的`AUTO_INCREMENT`。 2. **SEQUENCE**:使用数据库序列生成主键,适用于支持序列的数据库...
【标题】"04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略"涉及的关键知识点主要包括Java Persistence API (JPA)的基础应用、首个JPA实例的创建以及JPA主键生成策略的理解和配置。JPA是Java平台上的一个标准,...
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第4讲 第一个JPA实例与JPA主键生成策略.avi
### JPA主键生成策略 1. **`GenerationType.AUTO`**:这是最常用的策略,具体的生成方式由数据库供应商决定,通常对应于自动增长字段,例如在MySQL中的`AUTO_INCREMENT`。 2. **`GenerationType.IDENTITY`**:此...
seqhilo是一种通过hilo算法实现的主键生成策略,但是主键历史保存在Sequence中。这种策略适用于支持Sequence的数据库,如Oracle。 increment increment是一种插入数据的时候hibernate会给主键添加一个自增的主键的...
总的来说,理解并灵活运用JPA和Hibernate的主键生成策略,结合不同数据库的特性,是确保项目数据一致性和可移植性的关键。合理选择和配置主键生成方式,可以帮助我们优化数据库性能,同时保证数据的完整性。在实际...
第一个JPA实例与JPA主键生成策略** 在JPA中,主键的生成策略可以通过@Id注解和@GeneratedValue注解进行设置,如AUTO、IDENTITY、SEQUENCE、TABLE等,不同的策略对应不同的数据库系统主键生成方式。 **5. 日期_枚举...
JPA提供了多种主键生成策略,如`GenerationType.AUTO`、`GenerationType.IDENTITY`等,但这些策略大多适用于单个主键字段。对于联合主键,通常需要手动设置主键值,因为没有自动化的生成机制。 ### 5. 联合主键与...
- 在操作联合主键的实体时,需要特别注意主键的生成策略,因为JPA不会自动为联合主键生成值,除非明确指定。 ### 实践应用 在实际开发中,联合主键常常出现在需要多对多关联的场景,例如上述的`ProductCategory`...
- 通过使用JPA的注解,如`@Entity`(表示这是一个实体类)、`@Table`(指定数据库表名)、`@Id`(标识主键)、`@GeneratedValue`(主键生成策略)等,可以对JavaBean进行更精细的配置。 5. **使用生成的JavaBean**...
`@Id`表示主键,`@GeneratedValue`定义主键生成策略,这里使用了数据库自增策略。 4. **创建Repository接口** Spring Data JPA允许我们通过接口来操作数据库,无需编写SQL。创建一个继承`JpaRepository`的接口: ...
##### 2.7 JPA 主键生成策略 - **AUTO**:由实现决定。 - **IDENTITY**:由数据库自动生成。 - **SEQUENCE**:基于数据库序列生成。 - **TABLE**:通过查询特定表来获取主键值。 通过以上介绍,可以看出 Hibernate ...
联合主键的生成策略可以是自动生成(如`GenerationType.IDENTITY`),也可以是用户手动赋值。对于手动赋值,通常在创建新实体时,需要同时设置所有主键字段。如果希望使用自动生成,可能需要结合`@GeneratedValue`...
使用@Id注解定义主键字段,@GeneratedValue可以指定主键生成策略。例如: ```java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String ...
在OpenJPA中,实体标识(Entity Identifier)的生成策略是数据持久化过程中不可或缺的一部分,因为确保实体的唯一性对于数据库的正确性和一致性至关重要。OpenJPA提供了四种不同的策略来生成实体标识,使得开发者...
- 当使用联合主键时,JPA默认不会生成主键值,通常需要自定义生成策略或手动设置主键值。 - 在保存或更新实体时,确保联合主键的所有字段都有值,否则会抛出异常。 理解并正确使用JPA中的联合主键对于开发复杂的...