@SecondaryTable的Hibernate映射和继承问题

时间:2009-05-18 02:44:06

标签: java sql hibernate orm

我有一个非常简单的类层次结构,如下所示,每个子类都有一个@DiscriminatorValue枚举类型,效果非常好。

抽象类:

AbstractNode (映射到Node表的抽象类)

子类:

FieldNode (简单类也映射到Node表,但具有不同的@DiscriminatorValue值)

SynonymNode (问题类,此类还映射到具有不同@DiscriminatorValue值的Node表)

但是 ALSO 具有@SecondaryTable属性,并且有额外的列,例如deletedDate,createdDate等...每个列都映射到@SecondaryTable属性中定义的表中的coumns。

当我为该Node表执行简单的hibernate查询时,问题出现了

我收到的错误如下:

org.hibernate.exception.GenericJDBCException:无法执行查询 ... 堆栈跟踪 ... 引起:java.sql.SQLException:列名无效

在我的日志中我可以看到:

休眠:     选择         *     从         vocab_node     哪里         lower(name)like'%'|| ? || '%'

INFO [NullableType.java:132]:无法从结果集中读取列值:DELETED_DATE;列名称无效

我的猜测是它在数据库表中找到一行,然后识别出是 SynonymNode 类类型(通过@DiscriminatorValue列)然后尝试填充包含额外列表的类用@SecondaryTable映射。

我怎么能告诉它,左边加入@SecondaryTable,或者为这个特定的查询完全排除它?

谢谢堆!这个问题让我感到害怕!

我正在运行Hibernate 3.2.1和Java 1.5

干杯, 标记

1 个答案:

答案 0 :(得分:2)

我认为问题是您必须指定要映射到@SecondaryTable的字段......

在@Column注释中设置“table”属性:@Column(name =“somecol”,table =“secondaryTable”)

Hibernate抱怨是因为它在原始表中查找你应该在辅助表中查找它们的字段。