JPA 实体管理器外观
JPA EntityManagerFacade
我可能对 JPA EntityManagerFactory 有疑问。我的代码
import entity.ProgrammEQ;
import entity.Student;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
/**
*
* @author Kristián
*/
public class Zapoctovka_priklad {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("zapoctovka_prikladPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Student stud1 = new Student("Tom", "Pri");
Student stud2 = new Student("Jan", "Pol");
Student stud3 = new Student("Kris", "Str");
em.persist(stud1);
em.persist(stud2);
em.persist(stud3);
em.getTransaction().commit();
em.close();
emf.close();
zaradNeprihlasenych("Aplikovaná informatika");
}
public static void zaradNeprihlasenych(String programmName) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("zapoctovka_prikladPU");
EntityManager em = emf.createEntityManager();
Query q1 = em.createQuery("SELECT a FROM Student a WHERE a.StudProgram = NULL");
System.out.println("ahoj" + q1.getResultList().toString());
em.getTransaction().begin();
ProgrammEQ prog = new ProgrammEQ();
prog.setIdEQ(programmName);
prog.setStudentCount(0);
List<Student> studenti = q1.getResultList();
for (Student s : studenti) {
System.out.println(s);
s.setStudProgram(prog);
}
em.persist(prog);
em.getTransaction().commit();
em.close();
emf.close();
}
}
我有问题。因为当我向 table student 插入数据时,没问题。之后,当我关闭 EntityManager 和 EntityManagerFactory,并在另一个函数中我想添加一些属性时,我的 table 是空的。我尝试了很多东西,但我不知道该怎么做。当我在 main 函数中调用我的查询时,它 returns 正确的结果。但是当我在函数 zoradNeprihlasenych 中调用此查询时,它 returns 为空。当我删除 emf.close()
注释时,它运行良好。怎么做?我需要在函数外的另一个函数中执行此操作。
尝试在 persistence.xml
中将 Table Generation Strategy
设置为 create
,将 Validation strategy
设置为 none
。
我可能对 JPA EntityManagerFactory 有疑问。我的代码
import entity.ProgrammEQ;
import entity.Student;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
/**
*
* @author Kristián
*/
public class Zapoctovka_priklad {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("zapoctovka_prikladPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Student stud1 = new Student("Tom", "Pri");
Student stud2 = new Student("Jan", "Pol");
Student stud3 = new Student("Kris", "Str");
em.persist(stud1);
em.persist(stud2);
em.persist(stud3);
em.getTransaction().commit();
em.close();
emf.close();
zaradNeprihlasenych("Aplikovaná informatika");
}
public static void zaradNeprihlasenych(String programmName) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("zapoctovka_prikladPU");
EntityManager em = emf.createEntityManager();
Query q1 = em.createQuery("SELECT a FROM Student a WHERE a.StudProgram = NULL");
System.out.println("ahoj" + q1.getResultList().toString());
em.getTransaction().begin();
ProgrammEQ prog = new ProgrammEQ();
prog.setIdEQ(programmName);
prog.setStudentCount(0);
List<Student> studenti = q1.getResultList();
for (Student s : studenti) {
System.out.println(s);
s.setStudProgram(prog);
}
em.persist(prog);
em.getTransaction().commit();
em.close();
emf.close();
}
}
我有问题。因为当我向 table student 插入数据时,没问题。之后,当我关闭 EntityManager 和 EntityManagerFactory,并在另一个函数中我想添加一些属性时,我的 table 是空的。我尝试了很多东西,但我不知道该怎么做。当我在 main 函数中调用我的查询时,它 returns 正确的结果。但是当我在函数 zoradNeprihlasenych 中调用此查询时,它 returns 为空。当我删除 emf.close()
注释时,它运行良好。怎么做?我需要在函数外的另一个函数中执行此操作。
尝试在 persistence.xml
中将 Table Generation Strategy
设置为 create
,将 Validation strategy
设置为 none
。