当主键生成策略设置为手动设置:new出来的对象设置好 id 才能 persist,否则抛异常
@Test
public void test() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
EntityManager em = factory.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Student s = new Student();
s.setSname("张飞");
s.setSage(21);
em.persist(s);
/*
javax.persistence.PersistenceException:
org.hibernate.id.IdentifierGenerationException:
ids for this class must be manually assigned before calling save(): cn.wm.domain.Student
*/
tx.commit();
em.close();
factory.close();
}
@Entity
public class Student {
@Id // 没有添加@GeneratedValue注解,即手动设置主键
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 +
'}';
}
}
当主键生成策略设置为自动生成:new出来的对象 id 必须为 null 才能 persist ,否则抛异常
@Test
public void test() {
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(26);
em.persist(s);
/*
javax.persistence.PersistenceException:
org.hibernate.PersistentObjectException:
detached entity passed to persist: cn.wm.domain.Student
*/
tx.commit();
em.close();
factory.close();
}
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 设置主键生成策略设置为自动生成
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;
}
}