2013-06-30 44 views
1

後,我有以下領域的實體:JPA的SortedSet未使出堅持

@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),它會將註釋和程序實體本身都存儲到數據庫中。但是持久化方法調用的結果實體是一個對象,如下所示:Program(comments:[Comment(position:15), Comment(position:10)], ...),按照與持久方法相同的順序。

從我的角度來看,在這一點上,結果實體應該呈現遵循指定的@OrderBy規則的值,還是我錯過了什麼?

其他信息:

  • JPA2
  • 休眠4.2.0.Final
+0

如果您採取的方式是使用['@ OrderColumn'](http://docs.oracle.com/javaee/6/api/javax/persistence/OrderColumn.html)註釋代替,所以不要把在Comment對象中,你可以通過控制它們在列表中的位置來控制註釋的順序。這應該在應用程序和數據庫之間保持一致。不過,我不確定這是否有幫助。 –

回答

2

排序依據簡單地通過子句用於加載程序的註釋查詢添加的順序。而已。其餘的由你負責。因此,如果您想在添加評論和保留評論時按位置排序評論,您必須親自處理。

我個人從未發現這個註釋是非常有用的。我也發現它不能在任何情況下工作,特別是當使用查詢來獲取帶有註釋的程序時,使用查詢中已經存在的order by子句。我通常不喜歡使用這個註釋,並提供一個使用比較器返回排序集或註釋列表的方法getSortedComments()

+0

它的無用性正是我的看法,我通過使用[@Sort]找到了一個解決方案(http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#collections - 分類),但它是特定於Hibernate的。我只是實現了'java.util.Comparable'並用'@Sort(SortType.NATURAL)'註解了這個字段。 –