У меня есть объект отображается следующим образом:Является ли @ManyToMany (mappedBy = ...) + @OrderColumn поддерживается JPA?
@Entity
@Table(name = "Groups")
@IdClass(value = GroupId.class)
public class Group implements Serializable
{
@Id
@Column(name = "round_id")
private Integer roundId;
@Id
@Column(name = "ordinal_nbr")
private Integer ordinalNbr = 0;
...
}
Он имеет составной ключ (round_id, ordinal_nbr)
, чтобы указать порядок групп в раунде.
Теперь представьте присоединиться таблицей, содержащими объекты, связывающих упорядоченных группы через ссылку себя (от группы к группе):
CREATE TABLE GroupLinks
(
parent_round_id INTEGER NOT NULL,
parent_ordinal_nbr SMALLINT NOT NULL,
child_round_id INTEGER NOT NULL,
child_ordinal_nbr SMALLINT NOT NULL,
PRIMARY KEY (parent_round_id, parent_ordinal_nbr, child_round_id, child_ordinal_nbr),
FOREIGN KEY (parent_round_id, parent_ordinal_nbr) REFERENCES Groups (round_id, ordinal_nbr),
FOREIGN KEY (child_round_id, child_ordinal_nbr) REFERENCES Groups (round_id, ordinal_nbr)
);
Я знаю, что можно сопоставить @ManyToMany
+ @JoinTable
+ @OrderColumn
для имущего лица (в зависимости от того я выбираю):
@ManyToMany
@JoinTable(name = "GroupLinks", joinColumns = {@JoinColumn(name = "parent_round_id", referencedColumnName = "round_id"), @JoinColumn(name = "parent_ordinal_nbr", referencedColumnName = "ordinal_nbr")}, inverseJoinColumns = {@JoinColumn(name = "child_round_id", referencedColumnName = "round_id"), @JoinColumn(name = "child_ordinal_nbr", referencedColumnName = "ordinal_nbr")})
@OrderColumn(name = "child_ordinal_nbr")
private List<Group> children;
Вопрос:
Для принадлежащей стороне, поддерживается ли она для обратной связи @ManyToMany(mappedBy = ...)
с @OrderColumn
?
@ManyToMany(mappedBy = "parents")
@OrderColumn(name = "parent_ordinal_nbr")
private List<Group> parents;
Определяет ли спецификация JPA 2 разрешать или отрицать это?
Благодаря
Обновление 1:
выше, по существу, график структуры. Вот пример:
Таблица GroupLinks
содержит в штучной упаковке объектов. Если посмотреть только на объект B2 Group
, список parents
будет содержать (a,1,b,2)
и (a,2,b,2)
. Что касается списка children
, он будет содержать (b,2,c,1)
, (b,2,c,2)
и (b,2,c,3)
.
Как вы можете видеть объекты в списках B2
не сталкивающихся, так что @OrderColumn
должно работать нормально для обоих отношенийparents
и children
- по крайней мере, в теории. Но какова практика здесь (JPA)?
Обратите внимание: это просто попытка использования Hibernate и/или EclipseLink на самом деле не отвечает на вопрос, должен ли поддерживать или поддерживать этот сценарий спецификатор JPA 2 или JPA-совместимый поставщик.
Обновление 2:
Попытка вышеуказанные отображения по результатам Hibernate в следующем за исключением отображения:
Caused by: org.hibernate.MappingException: Repeated column in mapping for collection: com.kawoolutions.bbstats.model.Group.parents column: parent_ordinal_nbr
at org.hibernate.mapping.Collection.checkColumnDuplication(Collection.java:340)
at org.hibernate.mapping.Collection.checkColumnDuplication(Collection.java:363)
at org.hibernate.mapping.Collection.validate(Collection.java:320)
at org.hibernate.mapping.IndexedCollection.validate(IndexedCollection.java:89)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1291)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1729)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
... 9 more
Извлечение @OrderColumn
для parent_ordinal_nbr
результатов в том же исключения для children
отношений , Похоже, что Hibernate не любит колонки заказов, которые также используются во внешних ключах.
Update 3:
Испытано с EclipseLink на GlassFish ... это работает, не картографирования исключений.
Возникают два вопроса: Followup
- DISALLOW ли JPA столбцов внешнего ключа порядка? Это не имеет для меня смысла, почему они не должны просто работать ...
- Является ли это ошибкой в спящем режиме?
Вне зависимости от состояния субъекта означает ... Followup вопрос здесь: http://stackoverflow.com/questions/10054400/jpa-ordercolumn-and- visible-state-of-entity – Kawu
Хорошее объяснение. Поистине показывает разницу между OrderColumn и OrderBy. +1 –