@Embedded beans 作为最终属性?

@Embedded beans as final attribute?

我们在一些 JPA 实体中使用了一些 @Embeddable bean 以获得更好的代码结构和重用。我想知道的是:我遇到的每个示例都为 @Embedded 对象提供了 setter 和 getter。为什么?我尝试将它们作为最终字段 - 这也有效,并且在我们的案例中很有意义,因为嵌入的东西总是存在的。这有什么我不知道的缺点吗?

例如:通常是这样做的:

@Embeddable
public class Address {
    // ...
}

@Entity
public class Person {
    @Embedded
    private Address address;

    public void setAddress(Address address) {
        this.address = address;
    }

    public Address getAddress() {
        return address;
    }
}

这样写Person有什么问题吗,总是有一个Address:

@Entity
public class Person {
    @Embedded
    private final Address address = new Address();

    public Address getAddress() {
        return address;
    }
}

您不能保留 finalstatic 字段,这适用于嵌入式或非嵌入式。 JPA 规范对此非常清楚,不同 JPA 提供程序的文档也是如此。

JPA 规范 $2.1

The entity class must not be final. No methods or persistent instance variables of the entity class may be final.