我有一个实体可以有0个或同一个实体的子节点。此外,实体可以拥有同一实体的0个或一个父级。
表格结构
Account (
AccountId PK,
Name char
etc...
)
AccountRef (
ChildId PK, FK references Account(AccountId)
ParentId PK, FK references Account(AccountId)
)
一切正常,除非我加载帐户,连接总是在连接表上完成(我假设是否有AccountRef记录)。查询不会在帐户实体上重新加入,因此当我执行account.getMasterAccount()时,将对AccountRef进行连接,然后返回到帐户以获取主服务器。同样,这一切都是正确的,但不是最佳的,因为连接在需要时完成两次,而在不需要时则完成一次。
使用LazyToOne的工具是唯一的解决方法,还是有更好的方法来映射它?这是一个遗留的表结构,我无法修改它。
@Entity
Account {
@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="masterAccount")
private Set<Account> subAccount;
@ManyToOne(fetch=FetchType.LAZY)
@JoinTable(name="AccountRef",
joinColumns = @JoinColumn(name="childId", referencedColumnName="accountId"),
inverseJoinColumns = @JoinColumn(name="parentId", referencedColumnName="accountId")
)
private Account masterAccount;
答案 0 :(得分:0)
为什么需要连接表?对于一对多,它不应该是必要的。你应该能够完全删除JoinTable注释吗?或者你需要它吗?