Jpa 如果坚持,多对多什么都不会发生?
嗨,我有两门课Professor2.java和Projects2.java。这些是我的实体类,它们与多对多关系相关。这是我的Professor2课程的一部分,我在这里声明Project2实例列表Jpa 如果坚持,多对多什么都不会发生?,jpa,many-to-many,Jpa,Many To Many,嗨,我有两门课Professor2.java和Projects2.java。这些是我的实体类,它们与多对多关系相关。这是我的Professor2课程的一部分,我在这里声明Project2实例列表 @ManyToMany private List<Projects2> projects = new ArrayList(); public List<Projects2> getProjects() { return projects; } public vo
@ManyToMany
private List<Projects2> projects = new ArrayList();
public List<Projects2> getProjects() {
return projects;
}
public void setProjects(List<Projects2> projects) {
this.projects = projects;
}
问题是,第三个表是联接表(按照我首先创建实体类,然后从实体类创建数据库的方式),其中没有显示任何数据。您认为问题出在哪里。请添加您的联接表。对于双向many2many,必须将元素添加到关系两侧的两个集合中。考虑用SET替换列表(因此,在添加之前,您不必检查实体是否已经存在),并且在AddPrand PrdJ中执行持久操作之前,强制JPA使用EM.FIN()来检索对象的最新版本。是的,谢谢。强制JPA使用em.find()检索对象的最新版本。。。。。乐观锁定???悲观实际上这就是我要说的。。。在更新之前检索最新版本就像“杀死”乐观锁。。。不
@ManyToMany(mappedBy = "projects",cascade = CascadeType.PERSIST)
private List<Professor2> professor2s;
public List<Professor2> getProfessor2s() {
return professor2s;
}
public void setProfessor2s(List<Professor2> professor2s) {
this.professor2s = professor2s;
}
public void addProfessor(Professor2 prof)
{
if (!getProfessor2s().contains(prof))
{
getProfessor2s().add(prof);
}
if (!prof.getProjects().contains(this))
{
prof.getProjects().add(this);
}
}
public void addProfAndProj(Professor2 p1 ,Projects2 p2)
{
EntityManager em = emf.createEntityManager();
p2.addProfessor(p1);
try{
em.getTransaction().begin();
em.persist(p2);
em.getTransaction().commit();
} finally{
em.close();
}
}