2013-06-30 2 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), он будет хранить как комментарии, так и сам объект программы в базе данных. Но полученный объект из вызова метода persist является объектом следующим образом: Program(comments:[Comment(position:15), Comment(position:10)], ...), в том же порядке, что и метод persist.

С моей точки зрения, приведенный объект должен представить значения, следующие за указанным правилом @OrderBy, или я что-то пропустил?

Дополнительная информация:

  • JPA2
  • Hibernate 4.2.0.Final
+0

Если вы попытаетесь использовать аннотацию ['@ OrderColumn'] (http://docs.oracle.com/javaee/6/api/javax/persistence/OrderColumn.html), и поэтому не ставьте позиции в объекте «Комментарий», то вы можете контролировать порядок комментариев, контролируя их позицию в списке. Это должно оставаться согласованным между приложением и базой данных. Я не уверен, действительно ли это помогает. –

ответ

2

OrderBy просто добавить заказ пунктом в запросе используется для загрузки комментарии программы. Больше ничего. Остальное находится под вашей ответственностью. Поэтому, если вы хотите, чтобы комментарии, отсортированные по положению, добавляли комментарии и сохраняли их, вы должны сами позаботиться об этом.

Я лично никогда не находил эту аннотацию действительно полезной. Я также обнаружил, что он не работает в каждом случае, особенно при использовании запроса для извлечения программ с их комментариями, с предложением по предложению, уже присутствующим в запросе. Обычно я предпочитаю не использовать аннотацию theis и предоставлять метод getSortedComments(), который возвращает отсортированный набор или список комментариев с использованием компаратора.

+0

Бесполезное это было именно мое восприятие, я нашел решение, используя [@Sort] (http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#collections -sorted), но это Hibernate. Я только что реализовал 'java.util.Comparable' и аннотировал поле' @Sort (SortType.NATURAL) '. –