好的对象结构对于结果的我的休眠左外加入
-
05-07-2019 - |
题
我需要做一个外连接查询检索的所有定义和任何性质的,他们有与他们相关的是与某些公司。
我有两个休眠模型的对象:
class PropertyDefinition {
@Id
private Long id;
@Column
private String name;
@OneToMany(mappedBy = "propertyDefinition")
private Set<Property> properties = new HashSet<Property>();
}
class Property {
@Id
private Long id;
@ManyToOne
private Integer companyId;
@ManyToOne
private PropertyDefinition propertyDefinition;
}
因此查询结束了看上去就像:
from PropertyDefinition as pd left join pd.properties as props with props.companyId = :companyId
因此,所有被款为止。这问题我是什么样的结构做我的商店返回的数据?休眠返回一个列表,其中[0]是PropertyDefinition(不应该null)和[1]是可能的空财产。
我的问题:
- 其令人厌恶的和不非常OO友好通过列表的目的[]。
- 我不能就保持到PropertyDefinition因为名单的属性,它拥有不限于公司。
- 我可以创建一个简单的对象,有一个参考PropertyDefinition和一个可空的财产,但其效率低下有迭代过整个列表并把每一个进入这个新的对象。
任何人都有一个建议,为了更好地查询或一个更好的映射结构?我真的很感激的任何援助。
解决方案
嗯,通常的左边加入在收集是最好的处理经过 获取 其返回的一个列表的容器中对象与充收藏。但是,因为你使用 with
条件,这不会对你的工作。
如果你是要创建一个简单的持有人 PropertyDefinition
和 Property
与适当的公共构造,你可以告诉休眠返回:
select new Holder(pd, props)
from PropertyDefinition as pd
left join pd.properties as props
with props.companyId = :companyId
它应当照顾的问题已经列出;这不是理想的,但可能是最好的解决方案可用的情况下。
不隶属于 StackOverflow