java - @SecondaryTable 的 Hibernate 映射和继承问题

标签 java sql hibernate orm

我有一个非常简单的类层次结构,如下所示,每个子类都有一个 @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/

相关文章:

java - 有没有办法只接受 JTextField 中的数值?

java - 检查将鼠标悬停在 Selenium 中的链接上时鼠标光标是否变为手形?

sql - Firebird 数据类型列字段不正确

java - Hibernate HQL 是否支持别名子查询?

java - 如何使用缓冲写入器在文件中逐行写入?

java - 交互式 JTable

mysql - 用于只读操作的快速类 SQL 数据库

sql - 总和重复行值

java - 在 Hibernate 中只获取最后一条记录,但我想要所有记录

java - 三层体系中,业务逻辑应该放在哪里?