Java Persistence API(JPA):对关系的附加约束?

时间:2014-10-24 16:48:06

标签: java jpa

在JPA中,我是否可以另外约束@OneToMany@ManyToMany来生成相当于的内容:

select * from other_table a where a.fk_id = {id} and arbitrary other predicates

或者换句话说,我可以用这个获得所有员工的电话:

@Entity
public class Employee {
  @Id
  @Column(name="EMP_ID")
  private long id;
  ...
  @OneToMany(mappedBy="owner")
  private List<Phone> phones;
  ...
}

但如果我想要三个列表怎么办?

@Entity
public class Employee {
  @Id
  @Column(name="EMP_ID")
  private long id;
  ...
  @OneToMany(mappedBy="owner")
  private List<Phone> phonesInAreaCode212;  // only NYC phone numbers

  @OneToMany(mappedBy="owner")
  private List<Phone> phonesInAreaCode202;  // only DC phone numbers

  @OneToMany(mappedBy="owner")
  private List<Phone> phonesInOtherAreaCodes; // areaCode not in ('212', '202')
  ...
}

我知道我可以通过使用视图来实现这一点,我可以用单表继承和鉴别器列来完成它,但有没有办法为任意where子句谓词(包括复合谓词)执行此操作?

1 个答案:

答案 0 :(得分:0)

如何设置懒惰提取,它可能正在进行,例如,

@OneToMany(Fetch=FetchType.LAZY)

然后只对你想要的列表进行提取,如下所示:

employee.getPhonesInAreaCode212.size();