hibernate - hql怎么查有many to many关系但没有实体类的中间表数据
本文介绍了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屋!
查看全文