我只是想知道所有这些注释之间有什么区别。为什么我们使用这些...意味着它们没有影响,尤其是字段级别和属性级别。
使用混合级别注释的目的是什么:
@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";
}
}
这堂课究竟讲了什么?
默认情况下,访问类型由放置映射注释的位置定义。如果你把它们放到场上——那就是AccessType.FIELD,如果你把它们放在吸气剂上 - 它将是AccessType.PROPERTY.
有时您可能不想注释字段而是属性(例如,因为您希望在 getter 中具有一些任意逻辑,或者因为您更喜欢这种方式。)在这种情况下,您必须定义一个 getter 并将其注释为AccessType.PROPERTY
.
据我记得,如果您指定AccessType.FIELD
or AccessType.PROPERTY
在任何实体字段/方法上,您必须指定整个类的默认行为。这就是为什么你需要有AccessType.FIELD
在班级层面上(尽管AccessType.FIELD
是默认值。)
现在,如果你没有@Transient
on the phnnumber
字段,JPA 将为您提供一个 3 列的表:
那是因为它会使用AccessType.FIELD
对于所有实体字段(id
and phnnumber
),同时,它会使用AccessType.PROPERTY
为你的吸气剂(getPhnnumber()
).
您最终将在数据库中映射两次电话号码。
因此,@Transient
注释是必需的 - 这意味着该实体不会存储该值field在底层存储中,但您返回的值getter.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)