我找不到更好的问题所以我希望它能说明我的要求。
我有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个别名?