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注解是必需的 – 这意味着该实体不会将该字段的值存储在底层存储中,而是存储器返回的值。