2016-08-11 5 views
2

Пожалуйста, объясните, с какой целью @Transient был помещен на методы getter и setter в то же самое время, когда @Column была помещена в поле. Поле хранится в БД по мере необходимости.Размещение @ Колонка на поле и @ Перемещение на геттер и сеттер сразу

@Entity 

@Table(name = "person") 

public class Person { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private long id; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    @Column(name = "name") 
    private String name; 

    @Transient 
    public long getName() { 
     return name; 
    } 

    @Transient 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

ответ

0

Это на самом деле сложная ситуация. @transient аннотация и transient ключевое слово не обеспечивает такую ​​же функциональность. использование ключевого слова transient не приведет к сериализации ваших данных. но с использованием @transient аннотации будут сериализовать данные, но не будут persisted в базе данных, так как вы отметили поле @column аннотацией, что в базе данных будет persisted, потому что @Column позволяет указать имя столбца в базе данных, к которому атрибут должен сохраняться.

0

В коде, который у вас есть, они не действуют, поскольку @Id в поле вызывает доступ по умолчанию к полю, игнорируя при этом любые аннотации методов. Если доступ к свойствам был по умолчанию (либо с помощью @Id на getter, либо @Access (PROPERTY) в классе), аннотации @Transient заставили бы JPA игнорировать аксессоров, по-видимому, чтобы можно было отобразить сопоставление полей. Однако в этом случае поле должно быть аннотировано с помощью @Access (FIELD).

Я бы сказал, что аннотации @Transient являются остатками от времени, когда у объекта был доступ по умолчанию.

0

Я подозреваю, что его игнорировали, поскольку столбец уже отмечен и, как вы говорите, он обновляется по мере необходимости. Включение ведения журнала подтвердит это, поскольку оно будет генерировать предупреждение.

Вы можете сделать тест, создающий новое тестовое поле и обозначающее геттер/сеттер как переходный период