2015-05-19 3 views
0

У меня есть объект, который является владельцем двух Transient собственности firstName и lastName, и эти два свойства могут быть извлечены из третьего свойства FullName, который является определенный пользователем тип в базе данных.Как зимуют инициализировать объект

Теперь я хочу извлечь свойства заполнения firstName и lastName после получения сущности из базы данных.

@Entity 
@Table(name = "User") 
public class User { 

    @Id 
    private Integer id; 


    private FullName fullName; 
    @Transient 
    private String firstName; 
    @Transient 
    private String lastName; 

    ... 

    public void setFullName(FullName fullName){ 
     this.fullName = fullName; 

     this.firstName = fullName.getFirstName(); 
     this.lastName = fullName.getLastName(); 
    } 
} 

Однако firstName и lastName всегда нуль.

И я обнаружил, что setFullName никогда не включался, когда я открываю режим отладчика.

Что происходит?

ответ

1

Вы добавили аннотацию @Id в поле, эффективно заявив, что хотите, чтобы ваш поставщик JPA использовал доступ к полю. Таким образом, сеттер не вызывается.

Если вы хотите сохранить доступ к полям, вы можете удалить переходные поля и добавить геттеры для firstName и lastName, которые делегируют fullName.

+0

Он также мог бы просто не хранить эту избыточную информацию в переходных полях и просто возвращать fullName.getFirstName() из getFirstName() getter. –

Смежные вопросы