java - 加入时有额外条件的疯狂 hibernate 标准?

标签 java hibernate criteria

我有 2 个相关的实体:

@Entity
public class Base_Group implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    private String id;
    @Column(unique = true, nullable = false)
    private String name;
    @ManyToMany(mappedBy = "groups", fetch = FetchType.LAZY )
    private Set<Base_Role> roles = new HashSet<Base_Role>(0); 
    ...

@Entity
public class Base_Role implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    private String id;
    @Column(nullable = false)
    private String name;
    @ManyToMany(fetch = FetchType.EAGER)
    private Set<Base_Group> groups = new HashSet<Base_Group>(0); 
    ...

我想使用这个标准获取数据:

Criteria criteria = hem.getSession().createCriteria(Base_Group, "g");
criteria.setProjection( Projections.projectionList()
                .add( Projections.property("g.id"), "id" )
                .add( Projections.property("g.name"), "name" )
                .add( Projections.property("roles.id"), "roleId" ) )
            .createAlias("g.roles", "roles", JoinType.LEFT_OUTER_JOIN, Restrictions.eq("roles.id", roleId))
            .setResultTransformer(Transformers.aliasToBean(RoleGroups.class));

但是标准做了这样的错误查询:

select this_.id as y0_, this_.name as y1_, roles1_.id as y4_ from Base_Group this_ 
left outer join Base_Role_Base_Group roles3_ on this_.id=roles3_.groups_id and ( roles1_.id=? ) 
left outer join Base_Role roles1_ on roles3_.roles_id=roles1_.id and ( roles1_.id=? ) 

虽然在第一次加入时有不好的额外条件。有解决这个标准的想法吗?

最佳答案

因为你在这里做了:

.createAlias("g.roles", "roles", JoinType.LEFT_OUTER_JOIN, Restrictions.eq("roles.id", roleId))

使用:

...
.createAlias("g.roles", "roles", JoinType.LEFT_OUTER_JOIN)
.setResultTransformer(Transformers.aliasToBean(RoleGroups.class))
.add(Restrictions.eq("roles.id", roleId));

但是,我建议使用 HQL。这是一个具有单一限制的静态查询。

关于java - 加入时有额外条件的疯狂 hibernate 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22112448/

相关文章:

grails - 在 Grails 中查询与枚举集合的关联

java - SessionFactory opensession 抛出空指针异常

java - 使用外键对 2 个表进行关联时出现 Criteria 问题

java - GXT - RequestFactory 与 Paging Grid 集成

java - Aptana Studio 3 "...does not contain the JNI_CreateJavaVM symbol"错误

java - 在另一个程序中调用 IMAGEJ 插件

java - 从 Intellij 搜索中排除目标文件夹

java - Hibernate @OneToMany 合并错误

oracle - hibernate 序列生成器不一致

hibernate - Hibernate标准中的关联大小