1

我有一个具有以下字段的实体:

@ManyToMany(cascade = { CascadeType.ALL }, targetEntity = Comment.class)
@JoinTable(name = "program_to_comment")
@OrderBy("position")
private Set<Comment> comments = new HashSet<Comment>();

但我有一个问题,每当我坚持使用它时:

Program p = entityManager.persist(entity);

该字段带有按对象中排序的对象排序entity

假设entity对象配置如下:Program(comments:[Comment(position:15), Comment(position:10)], ...),持久化实体(entityManager.persist),它将评论和程序实体本身存储到数据库中。但是persist方法调用的结果实体是一个对象,如下所示:Program(comments:[Comment(position:15), Comment(position:10)], ...),以与persist方法相同的顺序。

从我的角度来看,结果实体应该按照指定的@OrderBy 规则呈现值,还是我遗漏了什么?

附加信息:

  • JPA2
  • 休眠 4.2.0.Final
4

1 回答 1

2

OrderBy 只需将 order by 子句添加到用于加载程序注释的查询中。而已。其余的由您负责。因此,如果您希望在添加评论和持久化评论时按位置对评论进行排序,则必须自己处理。

我个人从来没有发现这个注释真的很有用。我还发现它并非在所有情况下都有效,尤其是在使用查询来获取带有注释的程序时,查询中已经存在 order by 子句。我通常不喜欢使用 theis 注释,并提供一种getSortedComments()方法,该方法使用比较器返回排序集或评论列表。

于 2013-06-30T21:34:53.597 回答