我需要做一个外连接查询检索的所有定义和任何性质的,他们有与他们相关的是与某些公司。

我有两个休眠模型的对象:

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 条件,这不会对你的工作。

如果你是要创建一个简单的持有人 PropertyDefinitionProperty 与适当的公共构造,你可以告诉休眠返回:

select new Holder(pd, props)
  from PropertyDefinition as pd
  left join pd.properties as props
  with props.companyId = :companyId

它应当照顾的问题已经列出;这不是理想的,但可能是最好的解决方案可用的情况下。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top