gpt4 book ai didi

java - 在两个实体中为 1-m 关系 hibernate @JoinColumn

转载 作者:行者123 更新时间:2023-11-29 03:39:06 25 4
gpt4 key购买 nike

假设 Department 和 Employee 之间存在 1-m 关系,该部门可以有很多员工,并且一个员工只能在一个部门中。我将 depId 作为 Employee 表中的外键。下面是带有 setter 和 getter 的实体的样子,

@Entity
public class Employee {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long empId;
private String name;

@ManyToOne
@JoinColumn(name = "deptId")
private Department dept;

public Long getEmpId() {
return empId;
}
}



@Entity
public class Department {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long deptId;
private String name;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "deptId")
@IndexColumn(name = "idx")
private Set<Employee> listEmp;
}

较早的 Department 具有属性 mappedBy,现在两个实体都有 joinColumn 两个实体都是关系的所有者,对吗?

我的疑问是当我先创建部门然后创建一组员工并设置我创建的部门并保存部门对象时它工作正常。但是后来我只是尝试创建一个部门并创建一个员工并在那里设置部门并保存员工对象,它给我下面的异常。

Hibernate: insert into Employee (deptId, name) values (?, ?) Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: hello.domain.Department

它不应该双向工作吗?

最佳答案

Ealier Department has the attribute mappedBy and now both entities have joinColumn both entities are the owner of the relationship right?

不对。现在,您拥有两个不同的单向关联,而不是具有 OneToMany 双向关联,Hibernate 尝试使用同一列进行映射,从而导致不可预测的行为。

您应该在一侧使用 mappedBy 属性。

关于java - 在两个实体中为 1-m 关系 hibernate @JoinColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14012494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com