考虑以下两种关系:
@Entity class Foo {
@Id id;
@ManyToMany
@JoinTable(name = "ATag",
joinColumns = @JoinColumn(name = "foo_id"),
inverseJoinColumns = @JoinColumn(name = "tag_id"))
Set<Tag> tags;
}
@Entity class Tag {
@Id Long id;
String name;
}
连接表ATag没有对应的实体类。现在,我希望使用名为“tag1”的Tag获取所有Foo实例,是否可以仅使用Criteria?
子查询可能有用,但是,我不能为不存在的类ATag.class创建DetachedCriteria。
答案 0 :(得分:29)
刚刚处理了这个问题。你在考虑桌子而不是对象。只需引用tags.name
并让Hibernate处理剩下的事情:
Criteria crit = session.createCriteria(Foo.class);
crit.createAlias("tags", "tagsAlias");
crit.add(Restrictions.eq("tagsAlias.name", someValue);
如果您看到SQL Hibernate吐出,您会看到它使用连接表。