只需要大家的快速帮助。我使用mappedBy
代替@JoinColumn
仅用于性能优化:
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="user")
我被建议设置fetch=FetchType.EAGER
。
但我不想这样做。有没有其他方法可以获得懒惰的Loaded Collection Objects。
或者我应该使用@JoinColumn
吗?
然后mappedBy
对其他人来说有用,如果不能懒得读它。
示例实体
@Entity
@Table(name="users,uniqueConstraints=@UniqueConstraint(columnNames= "username"))
public class Users implements java.io.Serializable {
private Set<IDPMaster> idpMaster;
public void setIdpMaster(Set<IDPMaster> idpMaster) {
this.idpMaster = idpMaster;
}
@OneToMany(cascade = CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="user")
public Set<IDPUserManagerMapping> getIdpMapping() {
return idpMapping;
}
//Getters and Setters
}
@Entity
@Table(name="IDP_Master",schema="eb")
public class IDPMaster implements Serializable {
private Users idpUsers;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="paticipant_id",nullable=false)
public Users getIdpUsers() {
return idpUsers;
}
public void setIdpUsers(Users idpUsers) {
this.idpUsers = idpUsers;
}
}
答案 0 :(得分:2)
mappedBy 只能在一个实体中使用,即父实体,而@JoinColumn可以在关系的两侧使用。有关差异,请参阅JPA JoinColumn vs mappedBy。您能否显示已创建的示例实体?
此外,您无需指定fetch = FetchType.LAZY,因为默认情况下,fetchType在Hibernate中始终是惰性的。但是在JPA中,不同映射的获取类型是不同的。
编辑.. mappedBy 中提供的字段名称应为“idpUsers”,而不是“users”。它应该匹配子实体中的变量名称。