Hibernate @DiscriminatorColumn和@DiscriminatorValue问题

时间:2010-06-03 14:32:10

标签: hibernate jpa

我有这个父类:

@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 个答案:

答案 0 :(得分:2)

我不是一个休眠大师,但我想知道你的例子中是否需要@DiscriminatorColumn@DiscriminatorValue。你已经拥有了自己的表中的基类,并且我假设所有的子类都在他们自己的表中?

如果您查看以下链接,您会发现InheritanceType.JOINED未与鉴别器内容一起使用。使用InheritanceType.SINGLE_TABLE时会使用鉴别器注释。

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

答案 1 :(得分:0)

使您的数据库列具有默认值。

如果这不合适,请使用hbm2ddl.auto(设置为update),以便hibernate创建(更新)所需的结构。

更新:转到您的表格并手动为此列中的所有现有行设置值。然后重新启动您的应用程序。