hql怎么查有many to many关系但没有实体类的中间表数据

新手上路,请多包涵

我有一个admin表。一个role权限表 一个中间表admin_role,项目这实体类只有admin 和role 没有中间表的。在配置文件中有many to many 关系。请问我hql 怎么写能根据adminid 查询到roleid
两个表的配置文件如下。

admin hibernate 配置文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="com.gwideal.core.entity">
    <class
        name="Admin"
        table="CORE_ADMIN"
    >
        <meta attribute="sync-DAO">false</meta>
        <cache usage="read-write"/>
        <id
            name="id"
            type="java.lang.Long"
            column="ADMIN_ID"
        >
            <generator class="native"/>
        </id>
        <property
            name="createTime"
            column="CREATE_TIME"
            type="timestamp"
            not-null="true"
        />
        <property
            name="disabled"
            column="IS_DISABLED"
            type="java.lang.Boolean"
            not-null="true"
        />
        <many-to-one
            name="website"
            column="WEBSITE_ID"
            class="Website"
            not-null="true"
        >
        </many-to-one>
        <many-to-one
            name="user"
            column="USER_ID"
            class="User"
            not-null="true"
        >
        </many-to-one>
        <set
            name="roles"
            table="CORE_ADMIN_ROLE"
        >
            <key column="ADMIN_ID"/>
            <many-to-many column="ROLE_ID" class="Role"/>
        </set>
        <set
            name="functions"
            table="CORE_ADMIN_FUNCTION"
        >
            <key column="ADMIN_ID"/>
            <many-to-many column="FUNCTION_ID" class="Function"/>
        </set>
    </class>
</hibernate-mapping>

图片描述

role hibernate配置文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="com.gwideal.core.entity">
    <class
        name="Role"
        table="CORE_ROLE"
    >
        <meta attribute="sync-DAO">false</meta>
        <cache usage="read-write"/>
        <id
            name="id"
            type="java.lang.Long"
            column="ROLE_ID"
        >
            <generator class="native"/>
        </id>
        <property
            name="name"
            column="NAME"
            type="string"
            not-null="false"
            length="50"
        />
        <property
            name="description"
            column="DESCRIPTION"
            type="string"
            not-null="false"
            length="250"
        />
        <set
            name="admins"
            table="CORE_USER_ROLE"
            inverse="true"
        >
            <key column="ROLE_ID"/>
            <many-to-many column="ADMIN_ID" class="Admin"/>
        </set>
        <set
            name="functions"
            table="CORE_ROLE_FUNCTION"
        >
            <key column="ROLE_ID"/>
            <many-to-many column="FUNCTION_ID" class="Function"/>
        </set>


    </class>    
</hibernate-mapping>

图片描述

最后中间表
图片描述

阅读 4.4k
1 个回答
✓ 已被采纳新手上路,请多包涵

public Long getRoleId(long adminid) {

    String hql="select  r.id from Role r, Admin a where r.id in elements ( a.roles ) and a.id=?";
    return   (Long) findUnique(hql, adminid);    
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进