我有一个非常简单的类层次结构,下面列出,每个子类具有@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
干杯, 马克
我应该提到,到目前为止,我的工作是在我的SQL中左键连接@SecondaryTable,以便至少返回空值并且映射仍然正确。 – Mark 2009-05-18 02:47:29