我有一个包含以下字段的实体:
@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规则之后显示值,还是我错过了什么?
其他信息:
答案 0 :(得分:2)
OrderBy只需在用于加载程序注释的查询中添加order by子句。而已。其余的由你负责。因此,如果您希望在添加注释和持久化时按位置排序注释,则必须自己处理。
我个人从未发现此注释非常有用。我还发现它不适用于所有情况,特别是当使用查询来获取带有注释的程序时,查询中已经存在order by子句。我通常不喜欢使用theis注释,并提供getSortedComments()
方法,该方法使用比较器返回有序集或注释列表。