Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 JPA2.1加载对象后加载额外数据_Java_Hibernate_Jpa - Fatal编程技术网

Java JPA2.1加载对象后加载额外数据

Java JPA2.1加载对象后加载额外数据,java,hibernate,jpa,Java,Hibernate,Jpa,使用JPA,我可以在从数据库加载对象后运行查询吗 例如,我有一个实体具有以下字段: @OneToMany(mappedBy = "widget", fetch = FetchType.EAGER, cascade = {}) @OrderBy("happenedDate DESC") public List<Widget> getWidgets() { return widgets; } 是否存在此批注或模式?没有任何批注限制获取的记录数。要

使用JPA,我可以在从数据库加载对象后运行查询吗

例如,我有一个实体具有以下字段:

@OneToMany(mappedBy = "widget", fetch = FetchType.EAGER, cascade = {})
    @OrderBy("happenedDate DESC")
    public List<Widget> getWidgets() {
        return widgets;
    }

是否存在此批注或模式?

没有任何批注限制获取的记录数。要做到这一点,您必须运行一个JPA查询,这将是微不足道的。

没有任何注释来限制获取的记录数量。要做到这一点,您必须运行一个JPA查询,而这将是一个微不足道的过程。

这是不可能的,因为JPA/Hibernate必须管理整个集合的转换,比如从持久状态到删除状态的转换

无论如何,您可以使用以下备选方案:

1.HQL or Native SQL

2.Criteria Query

这是不可能的,因为JPA/Hibernate必须管理整个集合的转换,比如从持久状态到删除状态

无论如何,您可以使用以下备选方案:

1.HQL or Native SQL

2.Criteria Query

您可以使用@EntityListener类级别和@PostLoad方法级别的组合来实现您的目标

您可以使用@EntityListener类级别和@PostLoad方法级别的组合来实现您的目标

您可以使用特定于Hibernate的、不符合JPA的@Where注释来实现这一点,该注释采用本机sql子句来限制加载到关联集合的结果

此查询的外观将取决于您对LIMIT、TOP等的数据库支持

@OneToMany(mappedBy = "widget", fetch = FetchType.EAGER, cascade = {})
@OrderBy("happenedDate DESC")
@Where(clause = "id in (select top 20 id from table_name order by some_field desc)")
public List<Widget> getLast20Widgets() {
    return widgets;
}

您可以使用特定于Hibernate的、不符合JPA的@Where注释来实现这一点,该注释采用本机sql子句来限制加载到关联集合的结果

此查询的外观将取决于您对LIMIT、TOP等的数据库支持

@OneToMany(mappedBy = "widget", fetch = FetchType.EAGER, cascade = {})
@OrderBy("happenedDate DESC")
@Where(clause = "id in (select top 20 id from table_name order by some_field desc)")
public List<Widget> getLast20Widgets() {
    return widgets;
}

getWidgets方法的获取类型为。。。为什么不在GetLast20WidgetSmetMethod中简单地返回此列表的前20个元素呢?getWidgets方法的获取类型是。。。为什么不在GetLast20WidgetSmetMethod中简单地返回此列表的前20个元素呢?谢谢,但这不是我要问的谢谢,但这不是我要问的谢谢,这会起作用,但我不喜欢特定于数据库的SQL。我想保持这个数据库的不可知性,我真正想要的是Sanjeef下面的答案。谢谢,这会起作用,但我不喜欢特定于数据库的SQL。我想保持这个数据库的不可知性,我真正想要的是Sanjeef的回答belowRight,我知道我可以使用这些,问题是在对象加载后如何运行它们。事实证明回调模式正是我想要的。是的,我知道我可以使用它们,问题是在对象加载后如何运行它们。结果证明回调模式正是我想要的。