我有一个非常简单的类层次结构,如下所示,每个子类都有一个 @DiscriminatorValue 枚举类型,效果很好。
抽象类:
AbstractNode(映射到 Node 表的抽象类)
子类:
FieldNode(也映射到节点表的简单类,但具有不同的 @DiscriminatorValue 值)
SynonymNode(问题类,该类也映射到具有不同@DiscriminatorValue值的Node表)
但是ALSO有一个@SecondaryTable属性并有额外的列,例如deletedDate、createdDate等...每个列都映射到@SecondaryTable属性中定义的表中的列。
当我对该节点表进行简单的 hibernate 查询时,问题就出现了
我收到如下错误:
org.hibernate.exception.GenericJDBCException:无法执行查询 ... 堆栈跟踪 ... 引起原因:java.sql.SQLException:无效的列名
在我的日志中我可以看到:
hibernate : 选择 * 从 词汇节点 在哪里 lower(name) 如 '%' || ? || '%'
INFO [NullableType.java:132]:无法从结果集中读取列值:DELETED_DATE;列名无效
我的猜测是,它在数据库表中找到一行,然后识别出这是一个 SynonymNode 类类型(通过 @DiscriminatorValue 列),然后尝试填充该类,包括额外的列表与@SecondaryTable 映射。
我怎样才能告诉它,左连接@SecondaryTable,或者针对这个特定的查询完全排除它?
非常感谢!这个问题快要死我了!
我正在运行 Hibernate 3.2.1 和 Java 1.5
干杯, 标记
最佳答案
我认为问题在于您必须指定要映射到 @SecondaryTable 的字段...
在@Column注解中设置“table”属性:@Column(name="somecol", table="secondaryTable")
Hibernate 正在提示,因为它在原始表中查找您的字段,而它应该在辅助表中查找字段。
关于java - @SecondaryTable 的 Hibernate 映射和继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/876049/