标准:在3个实体之间创建别名

时间:2013-11-22 15:05:01

标签: java hibernate criteria hibernate-criteria

我找不到更好的问题所以我希望它能说明我的要求。

我有3个实体(我只会编写对于更好阅读真正重要的代码

Foo.java

public class Foo extends BaseEntity{
[...]
@OneToMany(mappedBy = "pk.foo")
    private Set<FooDooRel> Doos= new HashSet<FooDooRel>();
[...]
}

FooDooRel.java

public class FooDooRel implements IEntity {
@EmbeddedId
private FooDooRelId pk;
[...]
}

FooDooRelId.java

public class FooDooRelId implements Serializable {

    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.REFRESH })
    @JoinColumn(name = "doo_id")
    private Doo doo;

    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.REFRESH })
    @JoinColumn(name = "project_id")
    private Foo foo;
}

Doo.java

public class Doo extends BaseEntity{
[...]
@OneToMany(mappedBy = "pk.doo")
    private Set<FooDooRel> Foos= new HashSet<FooDooRel>();
@Column(name = "dispid", nullable = false)
    private String dispid;
[...]
}

现在我必须为我的过滤器创建别名

Criteria criteria = getSession().createCriteria(Foo.java, "foo")
criteria.createAlias("Doos", "Disp5", JoinType.LEFT_OUTER_JOIN, Restrictions.eq(Disp5.pk.foo.dispid", "5"));

现在第一个错误,当我这样做时,我收到此错误

  

无法解析属性:pk.foo.dispid:pl.FooDooRel

我知道我必须做第二次JOIN才能与Doo一起加入FooDooRel,但我不知道该怎么做。我可以为FooDooRel创建别名,但是如何以相同的标准进一步向Doo。

第二个,当我这样做时,我必须从同一个Set中做2个别名

Criteria criteria = getSession().createCriteria(Foo.java, "foo")
criteria.createAlias("Doos", "Disp5", JoinType.LEFT_OUTER_JOIN, Restrictions.eq(Disp5.pk.foo.dispid", "5"));
criteria.createAlias("Doos", "Disp6", JoinType.LEFT_OUTER_JOIN, Restrictions.eq(Disp5.pk.foo.dispid", "6"));

我收到错误,该路径重复

首先,如何通过检查Doo中的dispid将FooDooRel加入Foo,然后如何从同一路径加入2个别名?

0 个答案:

没有答案