我有一个使用Postgre 9.3和JPA2.1(Hibernate实现)的Spring MVC应用程序。我有一个类'电影',其中有一组评论。我想写一个JPA NamedQuery,它返回我所有的电影细节,但只有批准的评论。评论可以有其他状态,但我想只显示批准的评论。
我的班级如下所示:
@NamedQueries({
@NamedQuery(name="Movie.findMovieById",
query="SELECT c FROM Movie c WHERE c.id = :MovieId"),
@NamedQuery(name="Movie.findMovieByIdAndApprovedReviews",
query="SELECT c FROM Movie c INNER JOIN c.reviews r WHERE c.id = :MovieId AND r.state = 'USER_REVIEW_APPROVED'"),
})
public class Movie implements Serializable {
//Primary Key
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
//Movie Name
@Column(name = "name")
private String name;
//One Movie can have many reviews hence OneToMany
@OneToMany(fetch=FetchType.EAGER, mappedBy="Movie")
private Set<UserReview> reviews;
.
.
.
}
我写的查询不会过滤评论并返回包含所有评论的电影;它的工作原理与上面显示的findMovieById查询相同。
是否可以编写这样的查询?或者我必须把一些其他黑客过滤批准的评论?
谢谢。
你可以尝试使用Hibernate过滤器
@FilterDef(name="onlyApproved")
public class Movie implements Serializable {
...
@Filter(name="onlyApproved", condition="state = 'USER_REVIEW_APPROVED'")
@OneToMany(fetch=FetchType.EAGER, mappedBy="Movie")
private Set<UserReview> reviews;
然后,在执行查询时只需激活过滤器
Session session = entityManager.unwrap(Session.class);
session.enableFilter("onlyApproved");
entityManager.createNamedQuery(...);
在这种情况下,我需要根据项的某些属性(即条件是内部的而不是外部的)筛选。我发现javafx有,所以我尝试了一下。我可以设置谓词和筛选工作,直到确定筛选的属性值发生变化。现在可以像下面这样设置谓词: 由于谓词返回boolean而不是BooleanProperty,因此对该属性的更改不会反映在列表中。 对此有什么简单的解决办法吗?我可以尝试做一些变通方法,例如创建一个单独的列表并同步它,或者每次属性在
使用Jackson过滤掉属性非常简单: 我正在尝试将其集成到我的Jersey REST应用程序中。API用户可以通过提供查询字符串来过滤属性: 在泽西岛最优雅的方式是什么?我可以很容易地在我的资源方法中执行上述操作,但这不知何故破坏了Jersey的优雅。此外,我认为为每个请求创建一个新的ObjectMapper会导致性能下降。 我可以编写一个MessageBodyWriter,它从UriInfo上
基于 那个东西的 以下是我目前所尝试的: 我想使用一个Java8流和两个getter的lambdas来完成这一操作,这两个getter最终检索用于确定唯一性的属性,但不确定如何实现。当用于比较的属性位于pojo的顶层时,我知道如何做,但当属性嵌套在另一个对象中时,我不知道如何做。
问题内容: 我有一个简单的jpa实体“ ApplicationForm”,其中有一对多列表: ApplicationForm中包含的变量Dictionary是仅带有问题文本的另一个普通实体。字典映射的相应数据库表为: 我想知道是否可以使用jpa或hibernate建立一个查询,以使用特定语言环境(例如“ it”)的Dictionary检索ApplicationForm实体。使用标准sql可以轻松完
问题内容: 我有一个简单的jpa实体“ ApplicationForm”,其中有一对多列表: ApplicationForm中包含的变量Dictionary是仅带有问题文本的另一个普通实体。字典映射的相应数据库表为: 我想知道是否可以使用jpa或hibernate建立一个查询,以使用特定语言环境(例如“ it”)的Dictionary检索ApplicationForm实体。使用标准sql可以很容易
我有一个类似这样的组对象 和如下所示的Item对象