JPA EntiityManager.find方法

Posted wumingoo1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPA EntiityManager.find方法相关的知识,希望对你有一定的参考价值。

find 方法

  • 立即加载:在调用find方法的时候,就会查找缓存,找不到立即发送sql语句查询数据库。
  • 找到返回实体类对象,可以用于remove,setter,remove之后还可以调用persist保存。
  • 找不到返回null。

find 方法测试

find 之后 setter 实现更新

@Test
public void test1() {
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
    EntityManager em = factory.createEntityManager();
    EntityTransaction tx = em.getTransaction();
    tx.begin();

    Student s = em.find(Student.class, 1L);
    /*

    Hibernate:
        select
            student0_.sid as sid1_0_0_,
            student0_.sage as sage2_0_0_,
            student0_.sname as sname3_0_0_
        from
            Student student0_
        where
            student0_.sid=?

     */
    s.setSage(999); // ORM思想:操作Managed状态的实体类对象就相当于操作表中的记录

    tx.commit();
    /*

    Hibernate:
        update
            Student
        set
            sage=?,
            sname=?
        where
            sid=?

     */
    em.close();
    factory.close();
}

find 之后 remove 实现删除

@Test
public void test2() {
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
    EntityManager em = factory.createEntityManager();
    EntityTransaction tx = em.getTransaction();
    tx.begin();

    Student s = em.find(Student.class, 1L);
    /*

    Hibernate:
        select
            student0_.sid as sid1_0_0_,
            student0_.sage as sage2_0_0_,
            student0_.sname as sname3_0_0_
        from
            Student student0_
        where
            student0_.sid=?

     */
    em.remove(s); // ORM思想:操作Managed状态的实体类对象就相当于操作表中的记录

    tx.commit();
    /*

    Hibernate:
        delete
        from
            Student
        where
            sid=?

     */
    em.close();
    factory.close();
}

find 之后 remove 再 persist 相当于删除后又保存

@Test
public void test() {
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
    EntityManager em = factory.createEntityManager();
    EntityTransaction tx = em.getTransaction();
    tx.begin();

    Student s = em.find(Student.class, 1L);
    /*

    Hibernate:
        select
            student0_.sid as sid1_0_0_,
            student0_.sage as sage2_0_0_,
            student0_.sname as sname3_0_0_
        from
            Student student0_
        where
            student0_.sid=?

     */
    em.remove(s);

    em.persist(s);

    tx.commit();
    em.close();
    factory.close();
}

find 找不到返回 null

@Test
public void test2() {
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
    EntityManager em = factory.createEntityManager();
    EntityTransaction tx = em.getTransaction();
    tx.begin();

    Student s = em.find(Student.class, 1027500L); // 找不到返回 null
    /*

    Hibernate:
        select
            student0_.sid as sid1_0_0_,
            student0_.sage as sage2_0_0_,
            student0_.sname as sname3_0_0_
        from
            Student student0_
        where
            student0_.sid=?

     */
    System.out.println(s); // null

    tx.commit();
    em.close();
    factory.close();
}

以上是关于JPA EntiityManager.find方法的主要内容,如果未能解决你的问题,请参考以下文章

JPA - 批量/批量更新 - 更好的方法是啥?

JPA 和 DAO - 标准方法是啥?

JPA分页查询与条件分页查询

处理 JPA 合并的最佳方法?

获取 JPA 实体版本的通用方法

spring jpa 自带page @Query 出错