Java JPA2.1加载对象后加载额外数据
使用JPA,我可以在从数据库加载对象后运行查询吗 例如,我有一个实体具有以下字段: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; } 是否存在此批注或模式?没有任何批注限制获取的记录数。要
@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,我知道我可以使用这些,问题是在对象加载后如何运行它们。事实证明回调模式正是我想要的。是的,我知道我可以使用它们,问题是在对象加载后如何运行它们。结果证明回调模式正是我想要的。