1

我正在使用 Struts2 以及带有 Hibernate 的 JPA 进行项目。

我有两个实体用户(id,电子邮件)和客户(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 并让用户实体从它继承来遵循此处给出的答案,但没有任何效果。我仍然不断收到此错误消息。有人可以告诉我出了什么问题吗?

4

2 回答 2

2

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

于 2013-10-29T09:15:35.230 回答
0

删除 primaryKeyJoinColumn 语句。

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

默认情况下,继承机制将使用 superClass 中定义的 Pk(不管他的名字) ENjoy

于 2015-02-01T16:36:59.097 回答