Java EE - 执行最少逻辑的实体吸气剂
Java EE - Entity getters doing minimal logic
我正在使用 JPA.I 开发一个 java 企业应用程序,我会通过示例来解释我的疑问。
我的 EntityA 有一个字段(使用连接 table 保存在数据库中)代表 EntityB 的列表,如下所示。
public class EntityA {
private List<EntityB> listOfB;
*getter and setter for listOfB*
}
无论如何,我都不希望我的 getter for listOfB 为 return null。
如果 listOfB 为 null,我可以在代码中初始化它的最佳点是什么?
我想到的第一个解决方案是修改 getter:
public List<EntityB> getListOfB(){
if(listOfB == null)
listOfB = new ArrayList<EntityB>();
return listOfB;
}
然后我考虑使用@PostConstruct 标记的方法:
@PostConstruct
public void postConstruct() {
if(listOfB == null)
listOfB = new ArrayList<EntityB>();
}
我想另一个选择是修改构造函数。
最好的方法是什么?最重要的是我要问这个,因为我不希望由于与 JPA 功能的交互而发生任何问题。我也想知道前面提到的三个解决方案可能引发的任何问题。
怎么样:
public class EntityA {
private List<EntityB> listOfB = new ArrayList<EntityB>();
JPA 工具现在以这种方式从表中生成实体,这在 JPA 中运行良好。
这是一个非常好的解决方案,如果您只是想确保列表已初始化(因此不为空)。 JPA 工具似乎更进一步,并初始化对其他实体的所有引用。例如:
@Entity
public class Entity implements java.io.Serializable {
private OtherEntity otherEntity = new OtherEntity ();
private Set<EntityTwo> entityTwos= new HashSet<EntityTwo>(0);
我同意,初始化列表或集合 (OneToMany) 很有意义,因为列表可以为空。初始化另一个实体的对象有点奇怪(OneToOne、ManyToOne),因为引用可能不存在。但这是 JPA 工具生成的。
实体getter正在执行最少的逻辑
A Getter肯定是这个地方写错了。在您的示例中,getter 更改了对象的状态,这是您对 getter 所不期望的。
初始化 @PostConstruct 中的字段是一个可行的解决方案。但我更喜欢用它来初始化具有特定值或更多逻辑的字段。
我正在使用 JPA.I 开发一个 java 企业应用程序,我会通过示例来解释我的疑问。
我的 EntityA 有一个字段(使用连接 table 保存在数据库中)代表 EntityB 的列表,如下所示。
public class EntityA {
private List<EntityB> listOfB;
*getter and setter for listOfB*
}
无论如何,我都不希望我的 getter for listOfB 为 return null。 如果 listOfB 为 null,我可以在代码中初始化它的最佳点是什么?
我想到的第一个解决方案是修改 getter:
public List<EntityB> getListOfB(){
if(listOfB == null)
listOfB = new ArrayList<EntityB>();
return listOfB;
}
然后我考虑使用@PostConstruct 标记的方法:
@PostConstruct
public void postConstruct() {
if(listOfB == null)
listOfB = new ArrayList<EntityB>();
}
我想另一个选择是修改构造函数。
最好的方法是什么?最重要的是我要问这个,因为我不希望由于与 JPA 功能的交互而发生任何问题。我也想知道前面提到的三个解决方案可能引发的任何问题。
怎么样:
public class EntityA {
private List<EntityB> listOfB = new ArrayList<EntityB>();
JPA 工具现在以这种方式从表中生成实体,这在 JPA 中运行良好。
这是一个非常好的解决方案,如果您只是想确保列表已初始化(因此不为空)。 JPA 工具似乎更进一步,并初始化对其他实体的所有引用。例如:
@Entity
public class Entity implements java.io.Serializable {
private OtherEntity otherEntity = new OtherEntity ();
private Set<EntityTwo> entityTwos= new HashSet<EntityTwo>(0);
我同意,初始化列表或集合 (OneToMany) 很有意义,因为列表可以为空。初始化另一个实体的对象有点奇怪(OneToOne、ManyToOne),因为引用可能不存在。但这是 JPA 工具生成的。
实体getter正在执行最少的逻辑
A Getter肯定是这个地方写错了。在您的示例中,getter 更改了对象的状态,这是您对 getter 所不期望的。
初始化 @PostConstruct 中的字段是一个可行的解决方案。但我更喜欢用它来初始化具有特定值或更多逻辑的字段。