多对多单向连接表关联:只要一个端有Set就可以了,在<set>的属性中指明POJO中的Set集合,对应的链接表名,子元素<key>声明本端对应的连接表中的主键,<many-to-many>声明对应的连接表中的另一端的主键及其对应的POJO类.
以mis系统中的role(角色)和action(权限)表为例:
一个Role可以有多个Action, 一个Action也可以对应多个Role;
POJO如下:
package mis.hibernate.model;
import java.util.HashSet;
import java.util.Set;
/**
* Role entity. @author MyEclipse Persistence Tools
*/
public class Role implements java.io.Serializable {
private static final long serialVersionUID = 7198786374572086190L;
private Integer id;
private String name;
private String note;
private Integer flag;
private Integer version;
private Set actions = new HashSet(0);
// Constructors
/** default constructor */
public Role() {
}
/** minimal constructor */
public Role(String name) {
this.name = name;
}
/** full constructor */
public Role(String name, String note, Integer flag, Integer version, Set actions) {
this.name = name;
this.note = note;
this.flag = flag;
this.version = version;
this.actions = actions;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getNote() {
return this.note;
}
public void setNote(String note) {
this.note = note;
}
public Integer getFlag() {
return this.flag;
}
public void setFlag(Integer flag) {
this.flag = flag;
}
public Integer getVersion() {
return this.version;
}
public void setVersion(Integer version) {
this.version = version;
}
public Set getActions() {
return this.actions;
}
public void setActions(Set actions) {
this.actions = actions;
}
}
package mis.hibernate.model;
/**
* Action entity.
*
* @author MyEclipse Persistence Tools
*/
public class Action implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private String displayName;
private String description;
private Integer parentId;
private String url;
private Integer flag;
private Integer version;
// Constructors
/** default constructor */
public Action() {
}
/** minimal constructor */
public Action(String name) {
this.name = name;
}
/** full constructor */
public Action(String name, String displayName, String description,
Integer parentId, String url, Integer flag, Integer version) {
this.name = name;
this.displayName = displayName;
this.description = description;
this.parentId = parentId;
this.url = url;
this.flag = flag;
this.version = version;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getDisplayName() {
return this.displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getParentId() {
return this.parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getUrl() {
return this.url;
}
public void setUrl(String url) {
this.url = url;
}
public Integer getFlag() {
return this.flag;
}
public void setFlag(Integer flag) {
this.flag = flag;
}
public Integer getVersion() {
return this.version;
}
public void setVersion(Integer version) {
this.version = version;
}
}
hbm.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="mis.hibernate.model.Role" table="role" catalog="mis2009">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="128" not-null="true" unique="true">
<comment>权限组名称</comment>
</column>
</property>
<property name="note" type="java.lang.String">
<column name="note" length="128">
<comment>备注</comment>
</column>
</property>
<property name="flag" type="java.lang.Integer">
<column name="flag">
<comment>标识</comment>
</column>
</property>
<property name="version" type="java.lang.Integer">
<column name="version">
<comment>版本号</comment>
</column>
</property>
<set name="actions" table="role_action">
<key column="roleId"></key>
<many-to-many column="actionId" class="mis.hibernate.model.Action">
</many-to-many>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="mis.hibernate.model.Action" table="action" catalog="mis2009">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="128" not-null="true" unique="true">
<comment>权限名称</comment>
</column>
</property>
<property name="displayName" type="java.lang.String">
<column name="displayName" length="128">
<comment>显示到界面的名称,用中文表示更直观</comment>
</column>
</property>
<property name="description" type="java.lang.String">
<column name="description" length="128">
<comment>描述</comment>
</column>
</property>
<property name="parentId" type="java.lang.Integer">
<column name="parentId">
<comment>父权限节点Id</comment>
</column>
</property>
<property name="url" type="java.lang.String">
<column name="url" length="128">
<comment>对应的url地址</comment>
</column>
</property>
<property name="flag" type="java.lang.Integer">
<column name="flag">
<comment>标识</comment>
</column>
</property>
<property name="version" type="java.lang.Integer">
<column name="version">
<comment>版本号</comment>
</column>
</property>
</class>
</hibernate-mapping>
hql查询语句:
select distinct action from Action action,Role role where action in elements(role.actions) and role.id=5
分享到:
相关推荐
标题 "Hibernate基于连接表的一对多单向关联" 涉及的是数据库对象关系映射(ORM)框架Hibernate中的一个重要概念。在Java开发中,Hibernate是广泛使用的工具,它允许开发者将Java类与数据库表进行映射,简化了数据...
本文将深入探讨Hibernate中的多对多单向关联,并结合提供的资源`hibernate_many2many_1`进行详细解析。 在数据库设计中,多对多关系意味着一个实体可以与多个其他实体相关联,反之亦然。例如,学生和课程之间的关系...
本篇文章将详细讲解如何利用Hibernate的注解实现基于连接表的单向一对多关联。 首先,理解一对多关联:在数据库设计中,一对多关联意味着一个实体(表)可以与多个其他实体(表)相对应。例如,一个学生可以有多个...
类似于一对一的连接表关联,这里也是通过额外的连接表实现一对多关系。连接表会包含两个外键,一个指向父实体,另一个指向子实体。映射配置中,需要创建连接表实体,并使用 `many-to-one` 元素表示关联。 6. ...
在Hibernate中,多对多关联可以通过定义双向或单向的关联来实现。"单项关联"通常指的是只在一个实体类中定义了与另一个实体的关联,而在另一个实体类中没有对应的引用。这可以通过使用`@ManyToMany`注解来完成。 ...
以下是对"hibernate单向多对多映射(注解版)"的详细解释。 首先,我们需要理解多对多关系的概念。在数据库设计中,多对多关系意味着一个实体可以与多个其他实体相关联,反之亦然。例如,学生和课程之间的关系就是多...
在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射,特别是多对多单向关联。在数据库设计中,多对多关系是两个实体之间最复杂的关系类型,允许一个实体实例与多个其他实体实例相关联,反之亦然。在...
本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的...以上就是关于Hibernate一对一唯一外键关联映射(单向关联)的详细说明。通过这种方式,我们可以轻松地在Java应用中处理数据库的一对一关系。
创建一个连接表来维护多对多的关联关系。 ##### 3. 外键双向关联 除了在一的一方定义关联外,还在多的一方增加反向导航。 ##### 4. 连接表双向关联 与连接表单向关联类似,但在双方都增加了反向导航。 #### 五...
总结来说,Hibernate的一对多和多对一关联是数据库实体间关系映射的关键部分,它们提供了强大的工具来处理复杂的数据库交互。多对多关系和双向关联进一步扩展了这一功能,让数据管理更加灵活。在实际开发中,根据...
2. **@JoinTable**:多对多关系通常需要一个中间表来存储双方的关联,`@JoinTable`用来定义这个中间表,包括它的名字、连接的列名等。 ```java @Entity public class User { @ManyToMany @JoinTable(name = "user...
在多对多单向关联中,两个实体之间可以相互关联,这种关联通常通过第三个表(连接表或关联表)来实现。 **表结构示例**: - **Student表**: - `studentid`: 主键 - `name`: 姓名 - `age`: 年龄 - **Course表**:...
- `@JoinTable`用于多对多关联,定义连接表及其列。 二、项目实践 该项目可能包含以下关键文件: - `pom.xml`:Maven项目配置文件,包含了Hibernate和MySQL驱动等依赖。 - `hibernate.cfg.xml`:Hibernate的配置...
- **多对多连接表关联**:多对多关系通常通过一个连接表来实现,连接表中包含两个外键,分别指向相关联的两个实体的主键。 #### 映射关系的方向 - **单向关联**:实体间的关联关系只在一个实体中体现。 - **双向...
3. **多对多关联(Many-to-Many)**:多对多关联需要一个中间表来存储双方的关联信息,可以使用`@ManyToMany`注解,同时通过`@JoinTable`定义连接表的详细信息,包括连接字段和关联实体的引用。多对多关联的集合通常...
这种关联可以通过`@ManyToMany`注解实现,通常需要一个中间表(也称为连接表)来存储两个实体的关联信息。`@JoinTable`注解用于定义这个中间表,包括表名、联合主键等信息。`@ManyToMany`的`mappedBy`属性用于指定...
1. **多对多关联**: 在数据库设计中,多对多关系意味着两个实体之间存在多个可能的连接。例如,用户与角色的关系,一个用户可以有多个角色,一个角色也可以被多个用户拥有。 2. **Hibernate映射**: Hibernate通过...
一对一连接表单向关联是指在数据库中通过一张连接表来实现两个表之间的关联,并且这种关联是单向的,即在一个实体中定义了另一个实体的关系,而另一个实体并不知道这种关系的存在。 ##### 实体类定义 首先定义两个...