2010-09-01 2 views
2

У меня есть иерархия сущности, которая имеет одну таблицу для всех стратегий подклассов. И я хочу использовать все свойства - отображаемые @ManyToOne - в качестве основного ключа. Когда я ставлю @Id аннотацию, я получаю эту ошибку:Могу ли я использовать CompositeId для подклассов иерархии распознанных сущностей?

java.lang.ClassCastException: org.hibernate.mapping.SingleTableSubclass не может быть приведен к org.hibernate.mapping.RootClass

Так как я могу обеспечить определение всех свойств в качестве идентификатора на дискриминированной иерархии?

ответ

7

Ваш идентификатор должен быть уникальным для наивысшего объекта в иерархии, являющейся сущностью. Вы не можете определить ID в подклассах и иметь суперкласс, который является сущностью, у которой нет идентификатора.

Подумайте об этом таким образом, entityManager.find(SuperClass.class, 2); - это совершенно законный вызов. Если ID определены в подклассах как столбец FK, более одного из них могут иметь ID 2! Что будет возвращено?

Использование стороны FK отношения ManyToOne как первичного ключа в первую очередь бессмысленно. Таким образом, это по определению будет OneToOne.

Смежные вопросы