Java 使用JPA+;循环引用

Java 使用JPA+;循环引用,java,eclipse,jpa,inherited,Java,Eclipse,Jpa,Inherited,我有一个抽象类AbstractEntity,它包含两个字段: lastEditTime(LocalDateTime) lastEditUser(用户实体) 代码如下: @MappedSuperclass public abstract class AbstractEntity { protected LocalDateTime lastEditTime; protected UserEntity lastEditUser; protected AbstractE

我有一个抽象类AbstractEntity,它包含两个字段:

  • lastEditTime(LocalDateTime)
  • lastEditUser(用户实体)
代码如下:

@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\u name”

这是什么意思?我如何解决它


谢谢

我断开了eclipse数据源的连接。然后我清理项目(错误消息消失了),然后删除数据库中的表,最后运行测试用例重新创建表


新表有两个继承列。

抽象映射的超类引用子类(在构造函数中)是不寻常的。这可能只是一个抽象类?我的意图是只有一个表(“用户”),其中包含一个列,该列的主键是用户的外键。该列必须允许空值。我如何用JPA来表示这一点?我的第一种方法是使用id而不是对象(字符串而不是UserEntity)。。但是文献上说我应该引用对象,而不是ID。我说的对吗?消息告诉您,users表中没有lastEditUser\u name列。这是应该包含上次编辑用户实体实例的用户的外键的列。如果我将“protected UserEntity lastEditUser;”更改为“protected String lastEditUser;”,则会收到相同的错误消息。因此,问题不在于循环引用.JB Nizet。我应该在表中手动创建列吗?我以为JPA会这么做。