持久化后不会使用JPA SortedSet

时间:2013-06-30 20:29:04

标签: java hibernate jpa

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

@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
  • Hibernate 4.2.0.Final

1 个答案:

答案 0 :(得分:2)

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

我个人从未发现此注释非常有用。我还发现它不适用于所有情况,特别是当使用查询来获取带有注释的程序时,查询中已经存在order by子句。我通常不喜欢使用theis注释,并提供getSortedComments()方法,该方法使用比较器返回有序集或注释列表。