@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;
}
}
您不能保留 final 或 static 字段,这适用于嵌入式或非嵌入式。 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.
我们在一些 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;
}
}
您不能保留 final 或 static 字段,这适用于嵌入式或非嵌入式。 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.