JPA EntiityManager.persist方法

persist 方法

  • 持久化:保存并使得实体保持Managed状态
  • 发送insert语句的时机:
    • 如果配置主键生成策略为自动生成,则立即发送 insert 语句到数据库,因为应用程序可能需要这个自动生成的 id
    • 如果配置主键生成策略为手动设置,则 commit 时发送 insert 语句到数据库

persist 方法测试

persist 立即发送 insert 语句

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

    Student s = new Student();
    s.setSname("马良");
    s.setSage(28);

    em.persist(s); // 保存并使得实体保持Managed状态
    /*

    Hibernate:
        insert
        into
            Student
            (sage, sname)
        values
            (?, ?)

     */

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

    tx.commit();

    /*

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

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

@Entity
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 自动生成 id
    private Long sid;
    private String sname;
    private Integer sage;

    public Long getSid() {
        return sid;
    }

    public void setSid(Long sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public Integer getSage() {
        return sage;
    }

    public void setSage(Integer sage) {
        this.sage = sage;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", sage=" + sage +
                '}';
    }
}

persist 延迟发送 insert 语句

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

    Student s = new Student();
    s.setSid(1L);
    s.setSname("刘备");
    s.setSage(23);

    em.persist(s); // 保存并使得实体保持Managed状态

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

    tx.commit();
    /*

    Hibernate:
        insert
        into
            Student
            (sage, sname, sid)
        values
            (?, ?, ?)
    Hibernate:
        update
            Student
        set
            sage=?,
            sname=?
        where
            sid=?

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

@Entity
public class Student {
    @Id
    private Long sid; // 没有配置 @GeneratedValue,即手动设置 id
    private String sname;
    private Integer sage;

    public Long getSid() {
        return sid;
    }

    public void setSid(Long sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public Integer getSage() {
        return sage;
    }

    public void setSage(Integer sage) {
        this.sage = sage;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", sage=" + sage +
                '}';
    }
}

猜你喜欢

转载自www.cnblogs.com/wumingoo1/p/13399151.html
JPA