一尘不染

AccessType.FIELD,AccessType.PROPERTY和@Access的用途是什么

java

我只想知道所有这些注释之间的区别。我们为什么使用这些…意味着它们没有任何作用,特别是在字段级别和属性级别上。

像这样使用混合级别注释的目的是什么:

@Entity
@Access(AccessType.FIELD)
class Employee {
    // why their is a field level access 
    private int id;

    // whats the purpose of transient here
    @Transient                               
    private String phnnumber;

    // why its a property level access
    @Access(AccessType.property)             
    public String getPhnnumber() {
        return "1234556";
    }

}

这堂课到底怎么说?


阅读 563

收藏
2020-09-08

共1个答案

一尘不染

默认情况下,访问类型由放置标识符注释(@Id)的位置定义。如果您将其放在场地上-
将会AccessType.FIELD,如果您将其放置在吸气剂上-
将会AccessType.PROPERTY

有时,您可能不希望对字段进行注释,而要对属性进行注释(例如,因为您希望在getter中具有一些任意逻辑,或者因为您更喜欢这种方式。)在这种情况下,您必须定义getter并将其注释为AccessType.PROPERTY

据我所记得,如果您指定任何一个AccessType.FIELDAccessType.PROPERTY任何实体字段/方法,则必须指定整个类的默认行为。这就是为什么您需要AccessType.FIELD在类级别上进行设置(尽管这AccessType.FIELD是默认值)。

现在,如果你不会有@Transientphnnumber领域,JPA会为您提供3列的表:

  • ID,
  • phnnumber,
  • getphnnumber。

这是因为它将AccessType.FIELD用于所有实体字段(idphnnumber),同时将AccessType.PROPERTY用于getter(getPhnnumber())。
您将在数据库中将电话号码映射两次。

因此,@Transient注释是必需的-这意味着实体不会将 字段 的值存储在基础存储中,而是将您的 getter
返回的值存储在基础存储中。

2020-09-08