【发布时间】:2014-12-24 00:37:11
【问题描述】:
我有一个小问题,我有一个超类在 PostgreSQL 中为根表定义一个实体。
这个类有2个继承表/类实体,我想在其中添加一个@OneToOne连接表关联:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "equipement")
public abstract class Equipement
{
....
}
@Entity
@Table(name = "nod")
public class Nod extends Equipement
{
protected Cross cross;
@OneToOne(cascade = CascadeType.ALL, optional = true, fetch = FetchType.EAGER)
@JoinTable(name = "assoc_nod_cross", joinColumns = @JoinColumn(name = "nod_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "cross_id", referencedColumnName = "id"))
public Cross getCross()
{
return cross;
}
...
}
@Entity
@Table(name = "cross")
public class Cross extends Equipement
{
protected Nod nod;
@OneToOne(cascade = CascadeType.ALL, optional = true, fetch = FetchType.EAGER)
@JoinTable(name = "assoc_nod_cross", joinColumns = @JoinColumn(name = "cross_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "nod_id", referencedColumnName = "id"))
public Nod getNod()
{
return nod;
}
...
}
当列出所有 Nod 或 Cross 实体时,Hibernate 想在错误的表中搜索 inverseJoinColumns 字段,它不使用名称(assoc_nod_cross),我什至可以放任何东西。
示例:
Hibernate: select cross0_.id as id1_7_, cross0_.nod_id as nod_id2_1_ from cross cross0_
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
...
Caused by: org.postgresql.util.PSQLException: ERROR: column cross0_.node_id does not exist
这是因为@Inheritance 策略的问题吗?这是休眠中的错误吗?我的实体定义有问题吗?
添加信息:我尝试切换到 EclipseLink 以检查它是否是休眠错误/限制,或者我是否在某个地方出错。而且 EclipseLink 运行良好。
【问题讨论】:
标签: java hibernate postgresql jpa