我已经看到有关此问题的其他帖子,但找不到我自己的麻烦的答案。我有
@Entity
@Table(name= ServerSpringConstants.COMPANY)
public class Company implements Serializable {
private static final long serialVersionUID = -9104996853272739161L;
@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Column (name = "companyID")
private long companyID;
@OneToMany (targetEntity = Division.class, cascade = {
CascadeType.PERSIST,
CascadeType.MERGE,
CascadeType.REFRESH},
fetch = FetchType.EAGER)
@JoinTable (name = "companyDivisionJoinTable",
joinColumns = @JoinColumn(name="companyID"),
inverseJoinColumns = @JoinColumn(name="divisionID")
)
private Set<Division> divisions = new HashSet<>();
public long getCompanyID() {
return companyID;
}
public Set<Division> getDivisions() {
return divisions;
}
public void setDivisions(Set<Division> divisions) {
this.divisions = divisions;
}
}
另一方面:
@Entity
@Table(name= ServerSpringConstants.DIVISION)
public class Division implements Serializable {
private static final long serialVersionUID = -3685914604737207530L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
@Column(name = "divisionID")
private long divisionID;
@ManyToOne
(fetch = FetchType.LAZY, optional = false, targetEntity = Company.class,
cascade = {CascadeType.PERSIST, CascadeType.MERGE
}
)
@JoinColumn(name="companyID", referencedColumnName = "companyID")
private Company company;
public long getDivisionID() {
return divisionID;
}
public void setDivisionID(long divisionID) {
this.divisionID = divisionID;
}
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
}
但由于某种原因,LAZY装载不起作用。我正在使用JPA。我在“用户”类中回调这些公司及其附属部门 - 相关部分
@ManyToMany (targetEntity = Company.class,
cascade={
CascadeType.PERSIST,
CascadeType.MERGE,
CascadeType.REFRESH},
fetch=FetchType.EAGER )
@JoinTable (
name="companyUserJoinTable",
joinColumns=@JoinColumn(name="userID"),
inverseJoinColumns=@JoinColumn(name="companyID")
)
private Set<Company> company = new HashSet<>();
我搜索了现有的帖子,并尝试添加各种建议,但没有任何帮助! 任何帮助表示赞赏。
谢谢!
答案 0 :(得分:0)
由于您正在急切地加载分区(使用fetch = FetchType.EAGER)并且您具有双向关联,因此将使用对公司的父引用初始化分区。我看不出有任何问题。 Jpa加载了完整的对象树,因为你刚刚告诉它。公司包含分部,其中包含对加载它们的公司的反向引用。 为了更好地理解它,因为延迟加载的原因是减少从数据库加载的数据,所以拥有公司已经加载了部门的会话,那么为什么不设置关联呢?
如果先加载分区,则另一方的@ManyToOne关联生效。
为了使映射更正确,还可以在关联的一部分添加@MappedBy属性。这不会影响提取行为,但会阻止对关联两端发出的数据库进行双重更新。