Java JPA-创建或使用外键
好的,我有两个实体-: 教师 部门 一名教师可以属于一个部门,一个部门可以有许多教师 因此,要求教师实体包含映射关系的mappedBy属性 现在我面临的问题是,如果一个部门不存在,那么它就会被创建,如果不存在,一个查询就会获取该部门,并在teacher对象中使用该部门 现在的问题是,如果该部门存在,我必须使用merge,如果不存在,我必须使用persist,因为该部门将被新插入。我能做些什么来允许动态使用merge或persist吗 代码如下-: Department.javaJava JPA-创建或使用外键,java,hibernate,jpa,Java,Hibernate,Jpa,好的,我有两个实体-: 教师 部门 一名教师可以属于一个部门,一个部门可以有许多教师 因此,要求教师实体包含映射关系的mappedBy属性 现在我面临的问题是,如果一个部门不存在,那么它就会被创建,如果不存在,一个查询就会获取该部门,并在teacher对象中使用该部门 现在的问题是,如果该部门存在,我必须使用merge,如果不存在,我必须使用persist,因为该部门将被新插入。我能做些什么来允许动态使用merge或persist吗 代码如下-: Department.java @Entity
@Entity
@Table (name = "DEPARTMENTS")
@NamedQueries({
@NamedQuery(name = "Department.findById",
query = "SELECT d FROM "
+ "Department d "
+ "WHERE d.deptId = :id")
})
public class Department extends STSEntity{
private static final long serialVersionUID = 1L;
@Column (name = "DEPT_ID", length = 10,
unique = true, nullable = false)
private String deptId;
@OneToMany (targetEntity = Teacher.class,
mappedBy = "dept")
private Collection<Teacher> teachers = new ArrayList<>();
反正我两个都可以用?任何帮助都将不胜感激
基本上,如果外键存在,请使用它或以其他方式创建它。为什么不使用merge并让JPA确定它是否需要插入或更新?@Chris merge仅在有部门存在时才起作用。否则,如果我尝试持久化多个教师,它将尝试持久化部门的重复值。合并第一个教师后,使用合并教师中的部门,并在其他教师上使用该部门。应设置关系的两侧,以便所有新教师实例都关联到同一现有部门。如果将CascadeType.Merge添加到department.teachers关系中,则只需合并部门即可将所有新教师插入数据库。
@Entity
@Table (name = "TEACHER_DATA")
@NamedQueries ( {
@NamedQuery(name = "Teacher.getByDept",
query = "SELECT t "
+ "FROM Teacher t "
+ "WHERE t.dept = :dept")
})
public class Teacher extends STSEntity {
private static final long serialVersionUID = 1L;
@Column (name = "TEACHER_ID", unique = true, nullable = false, length = 10)
private String teacherId;
@ManyToOne (targetEntity = Department.class,
fetch = FetchType.EAGER,
cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
@JoinColumn (name = "DEPT_ID", nullable = false)
private Department dept;