JPA继承要求子类中的ID

时间:2013-10-28 16:12:51

标签: java hibernate inheritance jpa

我正在开发一个带有Struts2的项目以及带有Hibernate的JPA。

我有两个实体User(id,email)和Customer(user_id)。 因为很自然地认为每个客户都是用户,所以我从用户那里获得了客户继承。这是实体的相关代码:

用户:

@Entity
@Table(name = "user")
@Inheritance(strategy = InheritanceType.JOINED)
public class User implements Serializable {
    @Id
    @GeneratedValue
    private int id;
    private String email;
    ...getters and setters...
}

客户

@PrimaryKeyJoinColumn(name = "user_id",referencedColumnName = "id")
@NamedQueries({
@NamedQuery(name = "Customer.getByCustomerUserId", query = "SELECT C FROM Customer C where C.id=:id")
})
public class Customer extends User implements Serializable {
}

如果我运行查询 Customer.getByCustomerUserId ,我会收到错误:

  

'where子句'中的未知列'customer0_.id'

我尝试通过创建具有Id字段的BaseEntity并让用户实体从其继承但是没有效果来给出here给出的答案。我仍然收到此错误消息。有人可以告诉我出了什么问题吗?

2 个答案:

答案 0 :(得分:2)

我怀疑客户表中没有对用户表的引用,或者存在与约束相似的内容。 我建议你重命名你的实体类,让Hibernate从它们生成表。然后在新实体上使用查询,如果没有问题,则应检查新表与现有表之间的差异(在某些数据库工具中使用“创建表脚本”选项)。

答案 1 :(得分:0)

删除primaryKeyJoinColumn语句。

然后插入@ForeignKey(name =" CHOOSE_A_NAME")。 生成你的ddl并运行它(带约束)

默认情况下,继承机制将使用superClass中定义的Pk(无论他的名字是什么) 享受