考虑以下两个关系:
@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。
只是处理这个确切的问题。您在表中而不是对象中思考。只是参考tags.name,让Hibernate负责其余的工作:
tags.name
Criteria crit = session.createCriteria(Foo.class); crit.createAlias("tags", "tagsAlias"); crit.add(Restrictions.eq("tagsAlias.name", someValue);
如果您看到SQL Hibernate吐出,您会看到它使用了连接表。