2016-08-11 27 views
2

請解釋@Transient在@Column放置在字段的同時放置在getter和setter方法上的用途。 該字段按我們的需要存儲到數據庫。將@Column放在字段上並@ @Transient放在getter和setter上

@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字段會導致默認訪問是字段,因此會忽略任何方法註釋。如果屬性訪問是默認的(通過getter上的@Id或者類上的@Access(PROPERTY)),@Transient註釋會導致JPA忽略訪問器,這大概是爲了使字段映射可以被拾取。但是,在這種情況下,該字段應該用@Access(FIELD)註釋。

我會說@Transient註釋是實體具有默認屬性訪問時的剩餘時間。

0

我懷疑它被忽略,因爲列已標記,正如您所說它正在根據需要進行更新。啓用日誌會證實這一點,因爲它會產生警告

您可以做一個測試,創建一個新的測試字段並將吸氣劑/設置器標記爲瞬變