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.FIELD
或AccessType.PROPERTY
您必须指定整个类的默认行为。 这就是为什么您需要在类级别上具有AccessType.FIELD
(尽pipeAccessType.FIELD
是默认值)。
现在,如果您在phnnumber
字段中没有@Transient
,则JPA会为您提供一个3列表:
- ID,
- phnnumber,
- getphnnumber。
这是因为它会为所有的实体字段( id
和phnnumber
)使用AccessType.PROPERTY
,并且AccessType.PROPERTY
为你的getter( getPhnnumber()
)使用AccessType.PROPERTY
。
您将以数据库中映射两次的电话号码结束。
因此,@ @Transient
注解是必需的 – 这意味着该实体不会将该字段的值存储在底层存储中,而是存储器返回的值。