2016-08-11 22 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

我怀疑它被忽略,因为列已标记,正如您所说它正在根据需要进行更新。启用日志会证实这一点,因为它会产生警告

您可以做一个测试,创建一个新的测试字段并将吸气剂/设置器标记为瞬变