JoinTable(Parent / Child)to self总是在加载时加入表连接

时间:2010-12-13 16:55:36

标签: hibernate join reference self

我有一个实体可以有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;

1 个答案:

答案 0 :(得分:0)

为什么需要连接表?对于一对多,它不应该是必要的。你应该能够完全删除JoinTable注释吗?或者你需要它吗?