Hibernate @DiscriminatorColumn и @DiscriminatorValue проблема - PullRequest
3 голосов
/ 03 июня 2010

У меня есть родительский класс:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "BSEntity")
@DiscriminatorColumn(name = "resourceType", discriminatorType = DiscriminatorType.STRING, length = 32)
public abstract class BaseEntity {

и подкласс

@Entity
@Table(name = "BSCategory")
@DiscriminatorValue("Category")
public class CategoryEntity extends BaseEntity {

Но когда я запускаю программу, я получаю следующую ошибку:

2010-06-03 10:13:54,222 [main] WARN  (org.hibernate.util.JDBCExceptionReporter:100) - SQL Error: 1364, SQLState: HY000
2010-06-03 10:13:54,222 [main] ERROR (org.hibernate.util.JDBCExceptionReporter:101) - Field 'resourceType' doesn't have a default value

Есть мысли?

Обновлено: База данных MySQL. Я также изменил стратегию наследования на JOINED вместо SINGLE_TABLE. Помощь

Еще одно обновление: Я видел где-то следующее сообщение, и это выглядит очень интересно: http://opensource.atlassian.com/projects/hibernate/browse/ANN-140

Новое обновление: Если бы я использовал подход SecondaryTable, как бы я поступил тогда?

Окончательное обновление: выясняется, что функция @Discriminator плохо работает с hibernate. Я использовал подход @SecondaryTable, и он решил эту проблему для меня. Спасибо всем за помощь!

Ответы [ 2 ]

2 голосов
/ 03 июня 2010

Я не спящий гуру, но мне интересно, вам вообще нужны @DiscriminatorColumn и @DiscriminatorValue в вашем примере. У вас уже есть базовый класс в его собственной таблице, и я предполагаю, что все подклассы также находятся в своих собственных таблицах?

Если вы перейдете по следующей ссылке, вы увидите, что InheritanceType.JOINED не используется с дискриминатором. Дискриминаторные аннотации используются, когда вы используете InheritanceType.SINGLE_TABLE.

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e1168

0 голосов
/ 03 июня 2010

Сделайте так, чтобы столбец вашей базы данных имел значение по умолчанию.

Если это не подходит, используйте hbm2ddl.auto (установлен на update), чтобы hibernate создал (обновил) необходимую ему структуру.

ОБНОВЛЕНИЕ : перейдите к своей таблице и вручную установите значение для всех существующих строк в этом столбце. Затем перезапустите приложение.

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