Могу ли я использовать CompositeId для подклассов Иерархии Дискриминационных Сущностей? - PullRequest
2 голосов
/ 01 сентября 2010

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

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

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

1 Ответ

7 голосов
/ 01 сентября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...