У меня есть абстрактный AbstractEntity класса, который содержит два поля:Наследуются абстрактный класс с JPA + циклической ссылкой
- 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, который имеет много разных fi полей:
@Entity
@Table(name = "Users")
public class UserEntity extends AbstractEntity {
@Id
private String name;
private String password;
...
}
Eclipse, показывает следующее сообщение об ошибке:
подразумеваемой ассоциации переопределение "lastEditUser", присоединиться к колонке "lastEditUser_name" не может быть решена на столе "пользователей"
Что значит ли это? Как я могу это решить?
спасибо!
Необычно, что абстрактный суперкласмент ссылается на подкласс (в вашем конструкторе). Вероятно, это должен быть только абстрактный класс? –
Мое намерение состоит в том, чтобы иметь только одну таблицу («Пользователи»), которая содержит столбец с внешним ключом для основного ключа пользователей. Столбец должен допускать нулевые значения. Как я могу представить это с помощью JPA? У моего первого подхода был идентификатор вместо объекта (String вместо UserEntity) .. но в литературе говорится, что я должен ссылаться на объекты, а не на идентификаторы. Я прав? –
В сообщении говорится, что в таблице users нет столбца lastEditUser_name. Это столбец, который должен содержать внешний ключ для пользователя, который в последний раз редактировал экземпляр объекта пользователя. –