为什么有人在使用 JPA 映射类时要在 getter 或 setter 上放置注释?

2022-09-01 04:25:16

主题说明了一切...到目前为止,我认为人们在 getter 和/或 setter 上声明注释没有任何好处。对我来说,这只有将注释分散到类上的缺点,这会使类更不可读。

将注释放在字段上可以明显减少需要帮助时要发布的代码量。不过,这只是一个很小的优势。但是,在方法上添加注释对我来说没有任何意义。


答案 1

在方法上放置注释会强制 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 ...
}

在 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 ...
}

答案 2

为什么有人在使用 JPA 映射类时要在 getter 或 setter 上放置注释?

如前所述,如果需要,使用属性访问允许在 getter 中添加逻辑。

但是由于这个问题被标记为状态,我将提到另一个(巨大的)好处:属性访问允许您在不初始化代理的情况下调用foo.getId()。使用字段访问时,您不能获得相同的行为。Emmanuel Bernard将现场访问的这种局限性解释如下:

这是不幸的,但也是意料之中的。这是字段级访问的限制之一。基本上,我们没有办法知道getId()确实只去访问id字段。因此,我们需要加载整个对象以确保安全。

所以,是的,使用属性访问会使代码更难阅读,例如,您必须浏览整个类以查看周围是否有任何。但对我来说,好处(至少在)远远超过了这个缺点。@Transient

相关问题

引用


推荐