2009-05-18 128 views
1

我有一个非常简单的类层次结构,下面列出,每个子类具有@DiscriminatorValue枚举类型,它工作得很好。Hibernate映射和继承问题与@SecondaryTable

抽象类:

是AbstractNode(映射到节点表抽象类)

创建子类类:

FieldNode(简单的类映射到节点表,以及,但是具有不同的@ DiscriminatorValue值)

SynonymNode(问题类,这个类也映射到节点表与不同@DiscriminatorValue值)

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

林的问题是当我为节点表做一个简单的Hibernate查询

我得到这样的错误:

org.hibernate.exception.GenericJDBCException:无法执行查询 ... 堆栈跟踪 ... 产生的原因:值java.sql.SQLException:无效的列名

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

的Hib ernate: 选择 * 从 vocab_node 其中 下面(名称)like'%'|| ? || '%'

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

我的猜测是,它发现一个行中的数据库表,然后确定这是一个SynonymNode类类型(由@DiscriminatorValue列),然后尝试填充类包括映射的额外列的表与@SecondaryTable。

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

谢谢堆!这个问题正在杀死我!

进出口运行的Hibernate 3.2.1和Java 1.5

干杯, 马克

+0

我应该提到,到目前为止,我的工作是在我的SQL中左键连接@SecondaryTable,以便至少返回空值并且映射仍然正确。 – Mark 2009-05-18 02:47:29

回答

2

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

在@Column批注集“表”属性:@Column(name =“somecol”,表=“secondaryTable”)

Hibernate的抱怨,因为它是在原来的表时寻找你的领域它应该在辅助表中寻找它们。