我有一个非常简单的类层次结构,如下所示,每个子类都有一个@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
干杯, 标记
答案 0 :(得分:2)
我认为问题是您必须指定要映射到@SecondaryTable的字段......
在@Column注释中设置“table”属性:@Column(name =“somecol”,table =“secondaryTable”)
Hibernate抱怨是因为它在原始表中查找你应该在辅助表中查找它们的字段。