JPA的entityManager的find、getReference、persisit、remove方法的使用

场景

JPA入门简介与搭建HelloWorld(附代码下载):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937

在上面博客中搭建好JPA的HelloWorld后,再新建test包,包下新建Junit测试类

然后将JPA所需的API对象等声明

private EntityManagerFactory entityManagerFactory;
private EntityManager entityManager;
private EntityTransaction transaction;

然后编写每个测试方法执行前与执行后的方法

@BeforeEach
 public void init(){
  entityManagerFactory = Persistence.createEntityManagerFactory("HelloJPA");
  entityManager = entityManagerFactory.createEntityManager();
  transaction = entityManager.getTransaction();
  transaction.begin();
 }

 @AfterEach
 public void destroy(){
  transaction.commit();
  entityManager.close();
  entityManagerFactory.close();
 }

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

测试find方法

@Test
 public void testFind() {
  Customer customer = entityManager.find(Customer.class, 3);
  System.out.println("-------------------------------------");

  System.out.println(customer);
 }

上面方法通过主键ID为3查询到实体对象

类似于 hibernate 中 Session 的 get 方法。

测试getReference方法

@Test
 public void testGetReference(){
  Customer customer = entityManager.getReference(Customer.class, 3);
  System.out.println(customer.getClass().getName());
  System.out.println("-------------------------------------");
  System.out.println(customer);
 }

同上也是查询到主键Id为3的实体对象。

类似于 hibernate 中 Session 的 load 方法。

测试persist方法

@Test
  public void testPersistence(){
   Customer customer = new Customer();
   customer.setAge(15);
   customer.setEmail("[email protected]");
   customer.setLastName("LIUMANG");
   entityManager.persist(customer);

  }

上面方法将构建的对象存入数据库。

类似于 hibernate 的 save 方法. 使对象由临时状态变为持久化状态。

和 hibernate 的 save 方法的不同之处: 若对象有 id, 则不能执行 insert 操作,
而会抛出异常.。

测试remove方法

@Test
  public void testRemove(){

   Customer customer = entityManager.find(Customer.class, 4);
   entityManager.remove(customer);
  }

类似于 hibernate 中 Session 的 delete 方法.
把对象对应的记录从数据库中移除。

但注意: 该方法只能移除 持久化 对象. 而 hibernate 的 delete 方法实际上还可以移除
游离对象。

原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/12017384.html

时间: 2024-11-04 16:51:20

JPA的entityManager的find、getReference、persisit、remove方法的使用的相关文章

浅析JPA中EntityManager无法remove entity的问题

今天遇到一个奇怪的事情,利用EntityManager.remove(entity)方法删除一个entity时,删不掉,也不报错.后来经过多方查证,解决了这个问题. ERD Entity定义 ------------- 第一个Entity A --------------- @Entity public class A {     @Id     private Long id;          @Column(nullable = false, unique = true, length =

比较JPA的EntityManager接口与Hibernate的Session接口

本文对JPA的EntityManager接口与Hibernate的Session接口进行了比较,本文参考<精通JPA与Hibernate:Java对象持久化技术详解>第3版,2020年出版,作者:孙卫琴. EntityManager接口与Session接口的许多功能很相似,以下表1-1对这两个接口的方法做了对比.表1-1 对比EntityManager接口与Session接口 从以上表可以看出,EntityManager接口中的大部分方法在Sesson接口中都有对应的方法.EntityMana

C# Datatable删除行的Delete和Remove方法

delete和remove Delete的使用是 datatable.Rows[i].Delete(); Remove的使用是datatable.Rows.Remove(datatable.Rows[i]); 这两个的区别是,使用delete后,只是该行被标记为deleted,但是还存在,用Rows.Count来获取行数时,还是删除之前的行数.需要使用datatable.AcceptChanges()方法来提交修改. 而Remove方法则是直接删除. 如果在for循环里删除行的话,最好是使用de

Iterator的remove方法可保证从源集合中安全地删除对象(转)

import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorTest{ public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("Test1"); list.add("Test2&qu

EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

EntityFramework Core 1.1方法理论详解 当我们利用EF Core查询数据库时如果我们不显式关闭变更追踪的话,此时实体是被追踪的,关于变更追踪我们下节再叙.就像我们之前在EF 6.x中讨论的那样,不建议手动关闭变更追踪,对于有些特殊情况下,关闭变更追踪可能会导致许多问题的发生. 实体状态 对于EF Core 1.1中依然有四种状态,有的人说不是有五种状态么,UnChanged.Added.Modified.Deleted.Detached.如果我们按照变更追踪来划分的话,实际

Python List remove()方法-用于移除列表中某个值的第一个匹配项

描述 remove() 函数用于移除列表中某个值的第一个匹配项. 语法 remove()方法语法: list.remove(obj) 参数 obj -- 列表中要移除的对象. 返回值 该方法没有返回值但是会移除两种中的某个值的第一个匹配项. 实例 以下实例展示了 remove()函数的使用方法: #!/usr/bin/python aList = [123, 'xyz', 'zara', 'abc', 'xyz']; aList.remove('xyz'); print "List : &quo

探讨迭代器中为什么不能通过集合的方式删元素而是使用迭代器中的remove()方法经行删除

由该链接引发的思考:http://bbs.itheima.com/forum.php?mod=viewthread&tid=26270&mobile=1 看到这篇文章后,一副似懂非懂的样子,果断将楼主的代码拷贝到eclipse中运行了下,果断发现了些问题. 经过测试,发现总是在当集合中倒数第二个满足条件时程序才可以正常运行,否则,就会抛出ConcurrentModificationException异常 然后,我在while{it.hasNext()){和String str = (Str

Datatable删除行的Delete和Remove方法介绍

在实际项目开发中,如果要删除DataTable中的某一行,大约有以下几种办法: 使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index):可以直接删除行 datatable.Rows.Delete().Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除,还可以通过datatable.RejectChanges()回滚,使该行取消删除

collection中的remove方法

import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class CollectionTest03 { /** boolean remove(Object o); remove和contains方法都需要集合中的元素重写equals方法. 因为Object中的equals方法比较内存地址,在现实的业务逻辑当中 不能比较内存地址,该比较内容. */ public stat