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

查看:227
本文介绍了hibernate - 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>

最后中间表

解决方案

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);    
}

这篇关于hibernate - hql怎么查有many to many关系但没有实体类的中间表数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆