Проблема выглядит следующим образом:Hibernate WrongClassException/Sets/Discriminators?
Продукт стол. 3
joined-subclasses
: DVD, CD, Книга.Роль таблица (композитный идентификатор: NAME, роль, PRODUCT) и подклассы по колонку дискриминатора РОЛЬ: актер, режиссер, художник, автор, и т.д .., которые сопоставляются с Актер, режиссер, художник, автор классы java; (Довольно обычно, я думаю) ...
Книга имеет авторов, на CD художников, DVD актеры и режиссеры - все они смоделированы с помощью
set
сone-to-many
отношение указывает на класс предметы, например Автор, директор, художник и т.д .. которые только подклассы роли (см 2.)
До тех пор, как присоединился к подклассу имеет только один такой набор (из людей/ролей), все работает отлично. Но когда у него есть два, как DVD, актеры и режиссеры, Hibernate бросает исключение WrongClassException?
XML отрывок (Product.hbm.xml):
<joined-subclass name="media.DVD" table="V_DVD" lazy="false">
<key column="IDPRODUCT"/>
<property column="FORMAT" name="format" type="string"/>
...
<set name="actors" lazy="false">
<key column="IDPRODUCT"/>
<one-to-many class="media.DVD$Actor"/>
</set>
<set name="directors" lazy="false">
<key column="IDPRODUCT"/>
<one-to-many class="media.DVD$Director"/>
</set>
...
</joined-subclass>
XML (Person.hbm.xml):
<class name="media.Person" table="V_ROLE">
<composite-id>
<key-property column="NAME" name="name" type="string"/>
<key-property column="ROLE" name="role" type="string"/>
<key-many-to-one class="media.Product" column="IDPRODUCT"
name="product"/>
</composite-id>
<discriminator column="ROLE" insert="false" type="string"/>
<property name="name"/>
<property name="role"/>
<many-to-one class="media.Product" column="IDPRODUCT"
insert="false" name="product" update="false"/>
<subclass discriminator-value="author" name="media.Book$Author"/>
<subclass discriminator-value="artist" name="media.Music$Artist"/>
<subclass discriminator-value="creator" name="media.DVD$Creator"/>
<subclass discriminator-value="director" name="media.DVD$Director"/>
<subclass discriminator-value="actor" name="media.DVD$Actor"/>
</class>
Это кажется несколько хорошо для меня, но он бросает исключение. Спасибо за любую идею!
Не знаю, где вы получили это от. OP использует составной ключ для дочернего (Person), parent (media.DVD) имеет единственный (IDPRODUCT) ключ. – ChssPly76