2015-12-18 5 views
0

У меня есть абстрактный 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" не может быть решена на столе "пользователей"

Что значит ли это? Как я могу это решить?

спасибо!

+0

Необычно, что абстрактный суперкласмент ссылается на подкласс (в вашем конструкторе). Вероятно, это должен быть только абстрактный класс? –

+0

Мое намерение состоит в том, чтобы иметь только одну таблицу («Пользователи»), которая содержит столбец с внешним ключом для основного ключа пользователей. Столбец должен допускать нулевые значения. Как я могу представить это с помощью JPA? У моего первого подхода был идентификатор вместо объекта (String вместо UserEntity) .. но в литературе говорится, что я должен ссылаться на объекты, а не на идентификаторы. Я прав? –

+0

В сообщении говорится, что в таблице users нет столбца lastEditUser_name. Это столбец, который должен содержать внешний ключ для пользователя, который в последний раз редактировал экземпляр объекта пользователя. –

ответ

0

Я отключил источник затмения Datasource. Затем я очищаю проект (сообщения об ошибках пропали), затем я удалил таблицы в базе данных и, наконец, запустил тестовый пример для воссоздания таблиц.

Новая таблица имеет две унаследованные столбцы.