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
JPA过滤器实体嵌套对象列表_Jpa - Fatal编程技术网

JPA过滤器实体嵌套对象列表

JPA过滤器实体嵌套对象列表,jpa,Jpa,我正在使用JPA2.1。我有三个实体:Dr01、Dr02和Dr03,结构如下: public class Dr01 implements Serializable { @OneToMany(cascade = CascadeType.ALL, mappedBy = "dr01") private List<Dr02> dr02List; } public class Dr02 implements Serializable { @OneToMany(ca

我正在使用JPA2.1。我有三个实体:
Dr01
Dr02
Dr03
,结构如下:

public class Dr01 implements Serializable {

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "dr01")
    private List<Dr02> dr02List;

}
public class Dr02 implements Serializable {

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "dr02")
    private List<Dr03> dr03List;

    @JoinColumn(name = "DR2CLM", referencedColumnName = "DR1CLM", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Dr01 dr01;

}    

public class Dr03 implements Serializable {

    @JoinColumns({
        @JoinColumn(name = "DR3CLM", referencedColumnName = "DR2CLM", insertable = false, updatable = false),
        @JoinColumn(name = "DR3PTFN", referencedColumnName = "DR2PTFN", insertable = false, updatable = false)})
    @ManyToOne(optional = false)
    private Dr02 dr02;

    private elementOBJ element;
}

public class elementOBJ implements Serializable {

    @Column(name = "XXX")
    private int id;

    @Column(name = "YYY")
    private int status;
}
public类Dr01实现可序列化{
@OneToMany(cascade=CascadeType.ALL,mappedBy=“dr01”)
私人名单;
}
公共类Dr02实现了可序列化{
@OneToMany(cascade=CascadeType.ALL,mappedBy=“dr02”)
私人名单;
@JoinColumn(name=“DR2CLM”,referencedColumnName=“DR1CLM”,insertable=false,updateable=false)
@多通(可选=假)
私人Dr01 Dr01;
}    
公共类Dr03实现可序列化{
@连接柱({
@JoinColumn(name=“DR3CLM”,referencedColumnName=“DR2CLM”,insertable=false,updateable=false),
@JoinColumn(name=“DR3PTFN”,referencedColumnName=“DR2PTFN”,insertable=false,updateable=false)})
@多通(可选=假)
私人Dr02 Dr02;
私有元素obj元素;
}
公共类elementOBJ实现了可序列化{
@列(name=“XXX”)
私有int-id;
@列(name=“YYY”)
私人身份;
}
我想从
Dr01
中进行选择,只获取状态字段中包含值为1的元素对象的
Dr03
对象

如何检索按状态值筛选的dr03List?(选择后未过滤)


提前感谢。

可能有帮助的选项:

  • 根据DR03表的状态创建DB视图并映射 实体到那
  • 使用JPA继承,使用状态作为 鉴别器列
  • 如果使用Hibernate,请使用非JPA@Where 用于筛选集合的注释

  • 你到底想要什么?如果您只需要具有特定element.status值的Dr03实体,您是否尝试过“从Dr03 dr3中选择dr3,其中dr3.element.status=:status”?@Chris:我知道我可以这样做,但我只想选择Dr01(根据其Id)并获取Dr02和Dr03,但要对它们进行筛选。你明白我的意思吗?不太明白。如果您的意思是希望获取特定的Dr01并过滤该实体中的集合,那么这不在JPA的范围内,因为返回的托管实体旨在反映数据库中的内容。您可以直接使用所需的筛选器查询集合,而不是遍历Dr01.dr02List关系。