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