AccessType.FIELD,AccessType.PROPERTY和@Access的目的是什么?

我只是想知道所有这些注释之间有什么区别。 为什么我们使用这些…意味着他们没有效果,特别是在现场级别和财产水平。

使用混合级别注释的目的是什么?

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

这堂课讲的是什么?

默认情况下,访问types由放置标识符注释( @Id )的地方定义。 如果你把它放在字段上 – 这将是AccessType.FIELD ,如果你把它放在getter上 – 它将是AccessType.PROPERTY

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

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

现在,如果您在phnnumber字段中没有@Transient ,则JPA会为您提供一个3列表:

  • ID,
  • phnnumber,
  • getphnnumber。

这是因为它会为所有的实体字段( idphnnumber )使用AccessType.PROPERTY ,并且AccessType.PROPERTY为你的getter( getPhnnumber() )使用AccessType.PROPERTY
您将以数据库中映射两次的电话号码结束。

因此,@ @Transient注解是必需的 – 这意味着该实体不会将该字段的值存储在底层存储中,而是存储器返回的值。