@Test
public void save()
{
//得到这个EntityManagerFactory时就会去创建表
//hibernate 中得到sessionFactory同等
EntityManagerFactory entityFactory=Persistence.createEntityManagerFactory("person");
//得到EntityManager
//hibernate中得到session等同
EntityManager entity=entityFactory.createEntityManager();
//开启事务和hibernate一样
entity.getTransaction().begin();
entity.persist(new Person("liyong"));
entity.getTransaction().commit();
entity.close();
entityFactory.close();
}
//获取数据不用开事务(只有数据没有改变就不需开启事务)
@Test
public void getPerson()
{
EntityManagerFactory entityFactory=Persistence.createEntityManagerFactory("person");
EntityManager entity=entityFactory.createEntityManager();
Person person=entity.find(Person.class, 1);//hibernate中的get()方法
System.out.println(person.getName());
entity.close();
entityFactory.close();
}
@Test
public void getPeron2()
{
EntityManagerFactory entityFactory=Persistence.createEntityManagerFactory("person");
EntityManager entity=entityFactory.createEntityManager();
Person person=entity.getReference(Person.class, 1);//hibernate中的load()方法返回一个代理对象
System.out.println(person.getName());//当调用代理对象方法的时候才去加载数据
entity.close();
entityFactory.close();
}
//JPA中实体的四种状态 :新建、托管、游离、删除
@Test
public void update()
{
EntityManagerFactory entityFactory=Persistence.createEntityManagerFactory("person");
EntityManager entity=entityFactory.createEntityManager();
entity.getTransaction().begin();//必须开启事务
Person person=entity.find(Person.class, 1);
person.setName("小李");//这里不行是托管状态的
entity.getTransaction().commit();
entity.close();
entityFactory.close();
}
@Test
public void update2()
{
EntityManagerFactory entityFactory=Persistence.createEntityManagerFactory("person");
EntityManager entity=entityFactory.createEntityManager();
entity.getTransaction().begin();
Person person=entity.find(Person.class, 1);
entity.clear();//把实体管理器中所有实体变成游离状态
person.setName("小王");
entity.merge(person);//这里是把游离的实体同步到数据库中
entity.getTransaction().commit();
entity.close();
entityFactory.close();
}
@Test
public void delete()
{
EntityManagerFactory entityFactory=Persistence.createEntityManagerFactory("person");
EntityManager entity=entityFactory.createEntityManager();
entity.getTransaction().begin();
Person person=entity.find(Person.class, 1);
entity.remove(person);//这里删除的实体必须是托管
entity.getTransaction().commit();
entity.close();
entityFactory.close();
}
分享到:
相关推荐
本课程"07_传智播客JPA详解_使用JPA加载_更新_删除对象"将深入讲解JPA在加载、更新和删除对象方面的应用。 首先,让我们了解一下JPA的基本概念。JPA通过实体类(Entity Class)来映射数据库表,实体类中的属性对应...
本教程将深入讲解如何使用JPA进行对象的加载、更新和删除操作。 ### 1. JPA基本概念 #### 1.1 Entity(实体) 在JPA中,实体代表数据库中的表,通过在Java类上使用`@Entity`注解来标识。每个实体类对应一个数据库...
本篇文章将深入探讨JPA中的对象加载、更新、删除操作以及如何使用JPQL(Java Persistence Query Language)进行查询,这些都是Java开发者在处理持久化层时不可或缺的知识点。 首先,我们来看JPA的对象加载。JPA提供...
在Java世界中,Java Persistence API(JPA)是用于对象关系映射(ORM)的一种标准规范,它使得Java开发者能够以面向对象的方式处理数据库操作。本教程“11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护”聚焦于...
本资料主要探讨的是JPA中的一对多关系以及延迟加载机制,这两部分是JPA使用中的关键概念。 **一对多关系** 在关系数据库中,一对多关系是最常见的一种关联类型。例如,一个部门可以有多名员工,而每个员工只能属于...
3. **CRUD操作**:创建(Create)、读取(Read)、更新(Update)和删除(Delete)是JPA的基本操作。使用`EntityManager`的`persist()`、`merge()`、`find()`、`remove()`方法可以完成这些操作。 4. **JPQL查询**:...
2. **实体管理器(EntityManager)**:它是JPA的主要接口,负责管理实体的生命周期,如创建、查询、更新和删除。 3. **实体管理工厂(EntityManagerFactory)**:用于创建EntityManager实例,是线程安全的,一般在...
8. **实体监听器(EntityListeners)**:了解如何使用实体监听器进行实体生命周期事件的监听,如在插入、更新、删除时执行特定操作。 9. **性能优化**:分享如何优化JPA的性能,如批处理、延迟加载、缓存机制等,以...
实体管理器则负责与数据库进行交互,如保存、更新、删除实体以及执行查询。实体工厂是创建实体管理器的工厂类,而JPQL是一种类似于SQL的查询语言,用于在JPA中检索和操作实体。 在描述中提到的"ODP文件导出的PDF...
在Java世界中,Java Persistence API(JPA)是用于管理和持久化对象的规范,它使得开发者可以方便地在关系数据库和面向对象的程序之间进行数据交互。本资料包"10_JPA详解_JPA中的一对多双向关联与级联操作.zip"聚焦...
4. **Fetch策略**:默认情况下,JPA使用懒加载(Lazy Fetching)策略,这意味着关联的对象不会立即加载,只有在实际访问时才会查询数据库。如果需要立即加载关联,可以设置为急加载(Eager Fetching)。 5. **@...
JPA提供了一种对象/关系映射(ORM)机制,允许开发者以面向对象的方式处理数据,而无需直接编写SQL语句,简化了数据库操作。 本套“02_传智播客JPA详解_JPA开发环境和思想介绍”自学视频主要涵盖了以下几个关键知识...
2. **元数据驱动**: JPA使用元数据(如注解或XML配置)来定义对象如何映射到数据库表,以及如何执行CRUD(创建、读取、更新、删除)操作。 3. **查询语言(JPQL)**: JPA提供了Java Persistence Query Language,...
实体管理器是JPA的主要接口,用于执行CRUD(创建、读取、更新、删除)操作。实体管理工厂则用于创建实体管理器实例,它是线程安全的,一般在整个应用程序生命周期中只创建一次。持久化上下文是JPA的一个重要特性,它...
2. **懒加载与急加载**:JPA提供了懒加载和急加载策略来处理关联对象的加载。默认情况下,一对一关联是急加载,可以通过`@OneToOne(fetch = FetchType.LAZY)`设置为懒加载,以提高性能。 3. **数据一致性**:由于...
使用JPA加载_更新_删除对象** JPA提供了加载(find, persist, merge, refresh, detach等方法)、更新(通过Entity Manager操作)和删除(remove方法)对象的API,这些操作遵循Unit Of Work和Identity Map设计模式。...
**JPA(Java Persistence API)**是Java平台上的一个标准,用于对象关系映射(ORM),它简化了数据库与Java应用程序之间的数据交互。在JPA中,多对多(Many-to-Many)关联是一种常见的关系类型,允许一个实体实例与...
1. **懒加载(Lazy Loading)**:默认情况下,JPA对关联实体执行懒加载,即关联的对象只在真正需要时才从数据库加载,有效防止了"大数据量"问题。 2. **级联操作(Cascading)**:通过`@CascadeType`,可以设置一个...