我只想知道所有这些注释之间的区别。我们为什么使用这些…意味着它们没有任何作用,特别是在字段级别和属性级别上。
像这样使用混合级别注释的目的是什么:
@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"; } }
这堂课到底怎么说?
默认情况下,访问类型由放置标识符注释(@Id)的位置定义。如果您将其放在场地上- 将会AccessType.FIELD,如果您将其放置在吸气剂上- 将会AccessType.PROPERTY。
@Id
AccessType.FIELD
AccessType.PROPERTY
有时,您可能不希望对字段进行注释,而要对属性进行注释(例如,因为您希望在getter中具有一些任意逻辑,或者因为您更喜欢这种方式。)在这种情况下,您必须定义getter并将其注释为AccessType.PROPERTY。
据我所记得,如果您指定任何一个AccessType.FIELD或AccessType.PROPERTY任何实体字段/方法,则必须指定整个类的默认行为。这就是为什么您需要AccessType.FIELD在类级别上进行设置(尽管这AccessType.FIELD是默认值)。
现在,如果你不会有@Transient对phnnumber领域,JPA会为您提供3列的表:
@Transient
phnnumber
这是因为它将AccessType.FIELD用于所有实体字段(id和phnnumber),同时将AccessType.PROPERTY用于getter(getPhnnumber())。 您将在数据库中将电话号码映射两次。
id
getPhnnumber()
因此,@Transient注释是必需的-这意味着实体不会将 字段 的值存储在基础存储中,而是将您的 getter 返回的值存储在基础存储中。