【问题标题】:JPA: Conditionally fetch some of the child-objectsJPA:有条件地获取一些子对象
【发布时间】:2012-05-10 07:16:01
【问题描述】:

我正在尝试为 Parent 对象创建一个 NamedQuery,该对象从数据库中检索所有可用的 Parent 对象,并有条件地获取一些同一查询中的 Child 对象。例如。查询应该检索所有父对象并获取每个父对象具有 year=2012 的子对象。不应获取其余的子对象。我试图用 LEFT JOIN FETCH 玩 arround,但结果是一些父对象也被排除在外。但话又说回来,我对 FETCH 语句很陌生。

有什么方法可以完成上述任务吗?任何帮助深表感谢。我的Parent-object的相关代码如下:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "xxx/xxx/xxx/xxx", name = "Parent")
@XmlRootElement(namespace = "xxx/xxx/xxx/xxx")
public class Parent implements Serializable {
private static final long serialVersionUID = 1L;

/**
 */
.....................
/**
 */

@Column(name = "status")
@Basic(fetch = FetchType.EAGER)
@XmlElement
String status;
/**
 */
/**
 */
@OneToMany(mappedBy = "parent", cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
@XmlElement(name = "", namespace = "")
java.util.Set<xxx.xxx.xxx.Child> children;

【问题讨论】:

    标签: java hibernate jpa jpql


    【解决方案1】:

    您应该能够使用 @Where 注释来实现您想要的 - 您应该能够将如下注释添加到您的子属性中

    @Where(clause="year=2012")
    

    另外,请参阅此问题:How to apply a default-restriction on Entity-Bean @OneToMany Relationships

    【讨论】:

    • 感谢您的回答。但是这个论点是静态的,对吧?从某种意义上说,它将始终被应用?我希望能够使用 2012、2011、2010 年等执行查询。那么是否可以这样做,但只能使用我可以更改的输入参数? :)
    猜你喜欢
    • 1970-01-01
    • 2016-01-20
    • 2017-07-25
    • 2011-01-02
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2017-11-23
    • 2017-01-16
    相关资源
    最近更新 更多