0

我有一个带有多个电话号码的 Person 实体。

 @OneToMany(mappedBy="person", cascade=CascadeType.ALL)
 public Set<PhoneNumberOfPerson> getPhoneNumbers() {
    return phoneNumbers;
 }

现在我想为急切获取的 Person 实现一个“获取默认电话号码”方法。此默认电话号码是 phoneNumbers 集中的电话号码之一。有没有办法做到这一点?

我试图实现这一点的原因是在一个页面上列出了这个默认电话号码,该页面列出了数据库中的“所有”人员。

作为一名 JPA 初学者,我最初使用以下方法进行了尝试:

@Transient
public PhoneNumberOfPerson getDefaultPhoneNumber(){
    if(this.getPhoneNumbers().size()==0)
        return null;

    return this.getPhoneNumbers().iterator().next();

}

但这当然会导致列表页面非常缓慢。

那么有没有办法定义一个瞬态属性,该属性根据某些查询从实体集合中获取单个实体?我使用 Hibernate 作为我的持久性提供程序。

4

1 回答 1

0

您最好的选择可能是在 PhoneNumbers 表中有一个字段来指示它是默认号码,然后对返回 Person(s) 的查询执行 JOIN FETCH。

select p from Person p JOIN FETCH p.phoneNumbers as ph where ph.default = true

如果一个人可能没有电话号码,则使用左连接。

于 2009-02-17T17:24:17.323 回答