edi*_*dio 7 java architecture collections spring hibernate
我有一个POJO类,比如Foo,它有一组其他实体实例,比如说吧.此类项目还有标准的misc类:Foo和Bar的服务和dao.
我希望BarService获得与某些Foo相关联的Bar实例集.现在我有以下代码,我相信它在概念上很糟糕.
public class Foo {
Set<Bar> bars;
public Set<Bar> getBars() {
if (bars == null)
return ( bars = new HashSet() );
return bars;
}
}
Run Code Online (Sandbox Code Playgroud)
public class BarServiceImpl {
public List<Bar> getListOfBars(Foo foo) {
return new ArrayList(foo.getBars());
}
}
Run Code Online (Sandbox Code Playgroud)
3个问题:初始化Foo's Set哪个更好?哪些特定的集合和列表更适合此类目的?我目前的实施有哪些概念性问题,以及如何做得更好?
提前致谢.
Pas*_*ent 12
在哪里初始化Foo的Set更好?
大多数时候,我在声明它时初始化集合,这是Hibernate推荐的.引用文档:
6.1.持久收藏
Hibernate要求将持久的集合值字段声明为接口类型.例如:
Run Code Online (Sandbox Code Playgroud)public class Product { private String serialNumber; private Set parts = new HashSet(); public Set getParts() { return parts; } void setParts(Set parts) { this.parts = parts; } public String getSerialNumber() { return serialNumber; } void setSerialNumber(String sn) { serialNumber = sn; } }实际的界面可能是
java.util.Set,java.util.Collection,java.util.List,java.util.Map,java.util.SortedSet,java.util.SortedMap或任何你喜欢("任何你喜欢的类型"代表你需要编写的实现org.hibernate.usertype.UserCollectionType.)注意实例变量是如何使用实例初始化的
HashSet.这是初始化新实例化(非持久)实例的集合值属性的最佳方法.当你使实例持久化时,通过调用persist()例如,Hibernate实际上会替换HashSet一个Hibernate自己实现的实例Set.
如果离开它null是您业务的一部分,我的建议是用(通用)链接管理方法初始化它:
public class Foo {
...
private Set<Bar> bars;
...
public void addBar(Bar bar) {
if (this.bars == null) {
this.bars = new HashSet<Bar>();
}
this.bars.add(bar);
}
}
Run Code Online (Sandbox Code Playgroud)
哪些特定的集合和列表更适合此类目的?
这一切都取决于你需要的语义.A Set不允许重复,List允许重复并引入位置索引.
我目前的实施有哪些概念性问题,以及如何做得更好?
null在那一点,那就让它成为null.foo.getBars()?| 归档时间: |
|
| 查看次数: |
14409 次 |
| 最近记录: |