【发布时间】:2015-12-18 20:58:33
【问题描述】:
我有一个包含两个字段的抽象类 AbstractEntity:
- lastEditTime (LocalDateTime)
- lastEditUser (UserEntity)
下面是代码:
@MappedSuperclass
public abstract class AbstractEntity {
protected LocalDateTime lastEditTime;
protected UserEntity lastEditUser;
protected AbstractEntity () { }
protected AbstractEntity (UserEntity creatorUser) {
lastEditTime = LocalDateTime.now();
lastEditUser = creatorUser;
}
public LocalDateTime getLastEditTime() {
return lastEditTime;
}
public void setLastEditTime(LocalDateTime lastEditTime) {
this.lastEditTime = lastEditTime;
}
public UserEntity getLastEditUser() {
return lastEditUser;
}
public void setLastEditUser(UserEntity lastEditUser) {
this.lastEditUser = lastEditUser;
}
}
然后我有一个包含许多不同字段的 UserEntity 类:
@Entity
@Table(name = "Users")
public class UserEntity extends AbstractEntity {
@Id
private String name;
private String password;
...
}
Eclipse 显示以下错误消息:
在隐含关联覆盖“lastEditUser”中,无法在表“users”上解析连接列“lastEditUser_name”
这是什么意思?我该如何解决?
谢谢!
【问题讨论】:
-
抽象映射超类引用子类(在您的构造函数中)是不寻常的。这应该只是抽象类吧?
-
我的意图是只有一个表(“用户”),其中包含一个包含用户主键外键的列。该列必须允许空值。我如何用 JPA 来表示它?我的第一种方法是使用 id 而不是对象(字符串而不是 UserEntity).. 但是文献说我应该引用对象,而不是 ID。我说的对吗?
-
该消息告诉您用户表中没有 lastEditUser_name 列。这是应该包含最后编辑用户实体实例的用户的外键的列。
-
如果我更改“受保护的 UserEntity lastEditUser;”通过“受保护的字符串 lastEditUser;”我收到相同的错误消息。所以,问题不在于循环引用。
-
JB 尼泽特。我应该手动创建表中的列吗?我认为 JPA 会这样做。
标签: java eclipse jpa inherited