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

2022-08-31 14:48:33

我只想知道所有这些注释之间的区别是什么。我们为什么要使用这些...意味着它们没有影响,特别是字段级别和属性级别。

使用混合级别注释的目的是什么,例如:

@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";
    }

}

这门课到底说了什么?


答案 1

默认情况下,访问类型由放置标识符批注 () 的位置定义。如果你把它放在字段上 - 它将是AccessType.FIELD,如果你把它放在getter上 - 它将是AccessType.PROPERTY@Id

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

据我所知,如果您在任何实体字段/方法上指定其中之一或指定,则必须指定整个类的默认行为。这就是为什么你需要在类级别上(尽管这是默认值)。AccessType.FIELDAccessType.PROPERTYAccessType.FIELDAccessType.FIELD

现在,如果您没有字段,JPA将为您提供一个3列的表格:@Transientphnnumber

  • id,
  • phnnumber,
  • getphnnumber.

这是因为它将用于所有实体字段( 和 ),同时,它将用于您的 getter ()。
最后,您将在数据库中映射两次电话号码。AccessType.FIELDidphnnumberAccessType.PROPERTYgetPhnnumber()

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


答案 2

推荐