Kaw*_*awu 36 java mapping annotations hibernate jpa
主题说明了一切......到目前为止,我认为人们没有在吸气剂和/或制定者上声明注释的优势.对我来说,这只会带来在类上传播注释的缺点,这会使类更难以理解.
将注释放在字段上会明显减少需要帮助时要发布的代码量.这只是一个很小的优势.但是对方法进行注释对我没有任何意义.
axt*_*avt 42
在方法上添加注释会强制JPA通过方法访问属性.当对象的内部状态与数据库模式不同时,这是有意义的:
@Entity
public class Employee {
private String firstName;
private String lastName;
@Column(name = "EMP_NAME") // Due to legacy database schema
public String getName() {
return fisrtName + " " + lastName;
}
public void setName(String name) {
...
}
... Getters and setters for firstName and lastName with @Transient ...
}
Run Code Online (Sandbox Code Playgroud)
在JPA 2.0中,您可以使用以下命令指定细粒度级别的访问类型@Access
:
@Entity @Access(AccessType.FIELD)
public class Employee {
@Access(AccessType.PROPERTY) @Column(name = "EMP_NAME")
public String getName() { ... }
... other properties have field access ...
}
Run Code Online (Sandbox Code Playgroud)
Pas*_*ent 23
在使用JPA映射类时,为什么有人会在getter或setter上添加注释?
如前所述,如果需要,使用属性访问允许在getter中添加逻辑.
但由于问题被标记为hibernate,我将提到另一个(巨大的)好处:属性访问允许您在foo.getId()
不初始化代理的情况下调用.使用字段访问时,您无法获得相同的行为.Emmanuel Bernard解释了现场访问的这种限制如下:
这是不幸的,但预计.这是字段级访问的限制之一.基本上我们无法知道getId()确实只能访问id字段.所以我们需要加载整个对象才能安全.
所以,是的,使用属性访问会使代码更难阅读,例如,您可以浏览整个类以查看是否存在任何类@Transient
.但对我来说,这个好处(至少在冬眠时)远远超过了这个劣势.
归档时间: |
|
查看次数: |
22783 次 |
最近记录: |