前提:配置实体的主键生成策略为自动生成,否则会抛出异常
@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(19);
em.merge(s);
/*
Hibernate:
insert
into
Student
(sage, sname)
values
(?, ?)
*/
tx.commit();
em.close();
factory.close();
}
前提:数据库对应的表中没有此 id 的记录(立即发出 SQL 语句查询底层数据库),否则就是 更新
@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(400L); // 数据库中没有 id 为 4 的记录
s.setSname("曹操");
s.setSage(28);
em.merge(s);
/*
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=?
Hibernate:
insert
into
Student
(sage, sname)
values
(?, ?)
最终存入(16,28,曹操)
*/
tx.commit();
em.close();
factory.close();
}
前提:数据库对应的表中有对应 id 的记录(立即发出 SQL 语句查询底层数据库),否则就是 插入
@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(4L); // 数据库中有 id 为 4 的记录
s.setSname("赵云");
s.setSage(18);
em.merge(s);
/*
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=?
*/
tx.commit();
/*
Hibernate:
update
Student
set
sage=?,
sname=?
where
sid=?
存入 (赵云,18)
*/
em.close();
factory.close();
}
原文:https://www.cnblogs.com/wumingoo1/p/13402792.html