Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java持久性API(JPA):关系上的附加约束?_Java_Jpa - Fatal编程技术网

Java持久性API(JPA):关系上的附加约束?

Java持久性API(JPA):关系上的附加约束?,java,jpa,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; ...

在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;
  ...
}
@实体
公营雇员{
@身份证
@列(name=“EMP\u ID”)
私人长id;
...
@OneToMany(mappedBy=“所有者”)
私人名单电话;
...
}
但如果我想要三份清单呢:

@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')
  ...
}
@实体
公营雇员{
@身份证
@列(name=“EMP\u ID”)
私人长id;
...
@OneToMany(mappedBy=“所有者”)
私人列表电话AreaCode212;//仅纽约电话号码
@OneToMany(mappedBy=“所有者”)
私人列表电话AreaCode202;//仅限DC电话号码
@OneToMany(mappedBy=“所有者”)
私人列表电话在其他区号中;//区号不在('212','202')中
...
}

我知道我可以通过使用视图来做到这一点,而且我可能可以通过单表继承和鉴别器列来做到这一点,但是有没有办法为任意where子句谓词(包括复合谓词)做到这一点呢?

设置延迟获取,它可能无论如何都在这样做,例如

@OneToMany(Fetch=FetchType.LAZY)

然后仅对您想要的列表执行获取,如下所示:


employee.getPhonesInAreaCode212.size()

对于hibernate,有一种方法可以做到这一点,但我认为没有JPA通用的方法可以做到这一点。