使用jpa编辑实体
我试着用JPA编辑和编辑实体,我用了这个,但它什么都没做,为什么使用jpa编辑实体,jpa,jakarta-ee,Jpa,Jakarta Ee,我试着用JPA编辑和编辑实体,我用了这个,但它什么都没做,为什么 public void editExam(Exam e) { Exam ex=getExam(e.getIdExam()); EntityManagerFactory emf = Persistence.createEntityManagerFactory("QuizPU"); EntityManager em = emf.createEntityManager();
public void editExam(Exam e) {
Exam ex=getExam(e.getIdExam());
EntityManagerFactory emf = Persistence.createEntityManagerFactory("QuizPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
ex.setQuestions(e.getQuestions());
em.getTransaction().commit();
em.close();
emf.close();
}
我正在尝试更改列表中的问题的值。
这就是我的考试
实体类中的编码方式
@OneToMany (cascade = ALL)
@JoinTable(name="jnt_Exam_Question",
joinColumns = @JoinColumn(name="idExam"),
inverseJoinColumns = @JoinColumn(name="idQuestion"))
private List<Question> questions;
通过只创建一个EntityManagerFactory
实例来解决问题,此时“ex”处于什么状态?由于其EntityManager已关闭,因此它已分离!您需要使用新的EntityManager将其合并。但这在任何JPA教程中都有。为什么要多次创建EntityManagerFactory?!!!!
public Exam getExam(Long idExam) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("QuizPU");
EntityManager em = emf.createEntityManager();
String req1 ="select e from Exam e where e.idExam = ?1";
Query q1 = em.createQuery(req1);
q1.setParameter(1, idExam);
Exam e =(Exam) q1.getSingleResult();
em.close();
emf.close();
return e;
}