部门和员工属于一对多的关系

员工的账户属于一对一关系

账户和权限属于多对多关系

department.hbm.xml

 1 <hibernate-mapping>
2 <class name="com.demo.first.domain.Department" table="department">
3 <id name="did" column="did">
4 <generator class="native"/>
5 </id>
6 <property name="name" column="name"/>
7 <property name="description" column="description"/>
8 <set name="employeeSet" inverse="true" cascade="save-update">
9 <!-- 外键的名称(字段名):也就是说如果是一对多的关系,那么会在多的一方生成的外键名称是 column 中的值,
10 这个值是可以改变的,建议和对应的名称一致 -->
11 <key column="wj_id"></key>
12 <one-to-many class="com.demo.first.domain.Employee"/>
13 </set>
14 </class>
15 </hibernate-mapping>

employee.hbm.xml

 1 <hibernate-mapping>
2 <class name="com.demo.first.domain.Employee" table="employee">
3 <id name="eid" column="eid">
4 <generator class="foreign"><!-- 直接将主键和外键进行关联,主键同时作为外键使用,在 hibernate 中 one-to-one 没办法在代码中体现出新字段名,可以使用many-to-one来生成一个字段,也可以使用此方法来生成外键 -->
5 <param name="property">userAccount</param>
6 </generator>
7 </id>
8 <property name="name" column="name" length="20"/>
9 <property name="gender" column="gender"/>
10 <property name="birthday" column="birthday"/>
11 <property name="description" column="description"/>
12 <one-to-one name="userAccount" class="com.demo.first.domain.UserAccount" constrained="true" cascade="save-update"/>
13 <!-- 和 department 中配置 column 的名称是一样的,需要对应 -->
14 <many-to-one name="department" class="com.demo.first.domain.Department" column="wj_id"/>
15 </class>
16 </hibernate-mapping>

privilege.hbm.xml

 1 <hibernate-mapping>
2 <class name="com.demo.first.domain.Privilege" table="privilege">
3 <id name="pid" column="pid">
4 <generator class="native"/>
5 </id>
6 <property name="action"/>
7 <set name="userAccountSet" table="userAccount_privilege">
8 <!-- 和一对多一样的操作,column 是在生成的字段名(外键),是可以改变的,多对多的关系中,会生成一个中间表,那么在
9 column 中配置的参数就是生成的中间表中的字段名,另外一方配置的字段名需相同-->
10 <key column="wj_pid"></key>
11 <many-to-many class="com.demo.first.domain.UserAccount" column="ua_wj_id"/>
12 </set>
13 </class>
14 </hibernate-mapping>

useraccount.hbm.xml

 1 <hibernate-mapping>
2 <class name="com.demo.first.domain.UserAccount" table="userAccount">
3 <id name="uaid" column="uaid">
4 <generator class="native"/>
5 </id>
6 <property name="loginName" column="loginName"/>
7 <property name="password" column="password"/>
8 <one-to-one name="employee" class="com.demo.first.domain.Employee"/>
9 <set name="privilegeSet" table="userAccount_privilege">
10 <!-- 对应于另一方的参数配置,column 的参数值和另一方相同,也就是生成的中间表的字段名相同 -->
11 <key column="ua_wj_id"></key>
12 <many-to-many column="wj_pid" class="com.demo.first.domain.Privilege"/>
13 </set>
14 </class>
15 </hibernate-mapping>

另附上可以打开 hibernate debug 模式(可以查看所有的操作,包括自动建表语句等等):

需要的 jar 包等:

hibernate文件下载:https://sourceforge.net/projects/hibernate/files/hibernate-orm/5.4.2.Final/hibernate-release-5.4.2.Final.zip/download

在 hibernate-release-5.4.2.Final\project\etc 中找到 log4j.properties 这个文件,直接放到 src 的根目录下,即可:

重点就是上面的那个语句,去掉注释(默认是打开的,没有注释)重启即可,

2019-04-25

hibernate中关系映射的配置问题的更多相关文章

  1. hibernate(3) —— 关系映射

    hibernate中关系映射指的是实体类与实体类间的关系.和数据库中表与表之间的关系类似,有一对一,多对一,一对多,多对多四种映射关系. 一:一对一映射 两个对象之间是一对一的关系,如人和身份证之间是 ...

  2. Hibernate中的映射关系(一对多)

    在数据库中表和表之间的关系有几种,(一对一,一对多,多对多)一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique= ...

  3. Hibernate注解关系映射

    Hibernate Annotation关系映射的几种类型映射用法及使用方法(说明:以前实例的实体是user和role,主键分别是userid和roleid)   1)一对一外键关联映射(单向) @O ...

  4. hibernate中一对一映射

    一.hibernate中一对一映射有两种 1 主键方式,一张表的主键是通过另一张表的主键生成的 2 外键方式,一张表添加外键引用另一张表的主键,并添加唯一unique约束 二.下面进行简单例子,用户和 ...

  5. hibernate中的映射

    hibernate中的映射是指Java类和数据库表中的属性来进行关联,然后通过类来操作数据库中,这就是简单的映射.

  6. 详谈Hibernate框架关系映射!

    接触Hibernate也有一小段的时间了,愈发的觉得Hibernate是个神奇的东西,为什么这么说呢?因为你可以不懂一行sql,直接面向对象,就可以将数据直接保存到数据库去!! 你还可以保存一个对象, ...

  7. hibernate 实体关系映射笔记

    @经常使用属性说明:     @Entity:实体类     @Table:指定相应数据表     @Id:主键,使用能够为null值的类型,假设实体类没有保存到数据库是一个暂时状态     @Col ...

  8. hibernate对象关系映射( 一对一,一对多,多对一,多对多的单向,双向映射 ——)

    对象之间的关系: 关系映射之间的关系只的是对象之间的关系,并不指数据库表的关系(外键关系)这儿解决的问题是当对象之间的关系之一时,数据库表该如何映射,编程上如何对待. 一对一(主键关联,和单向的外键关 ...

  9. Hibernate 对象关系映射文件

    简介: POJO 类和关系型数据库之间的映射可以用一个 XML 文档来定义 通过 POJO 类的数据库映射文件,Hibernate 可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据 ...

随机推荐

  1. 包机制和javadoc

    包机制 一般用公司域名倒置作为包名: eg com.baidu.www 可以在src里自己鼠标右键建立包,包内可以存放代码, 包的路径必须在最上面, eg:package com.kuang; (自动 ...

  2. 自动生成requirements.txt

    Python 自动生成当前项目的requirements.txt 通常我们开发一个python项目时都会用conda 或者 virtualenv 等虚拟环境管理工具来创建一个虚拟环境,在这个虚拟环境中 ...

  3. AirPods Max 出厂激活是怎么回事

    AirPods Max 出厂激活是怎么回事 话说出厂激活是怎么检测出来的 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问! 原创文 ...

  4. How to enable HTTPS for local development in macOS using Chrome

    How to enable HTTPS for local development in macOS using Chrome HTTPS, macOS, Chrome local HTTPS htt ...

  5. flex & flex-wrap

    flex & flex-wrap https://css-tricks.com/almanac/properties/f/flex-wrap/ https://developer.mozill ...

  6. js & class & init

    js & class & init how to call class init method in js when create an instance 在初始化类实例的时候调用,类 ...

  7. svg click event bug & css pointer-events

    svg click event bug & css pointer-events svg click event not working Error OK ??? css class /* d ...

  8. React & Desktop App

    React & Desktop App https://proton-native.js.org/#/ https://github.com/kusti8/proton-native

  9. 「NGK每日快讯」12.21日NGK第48期官方快讯!

  10. NGK Global伦敦路演:“区块链+能源”必将推动世界性能源革命

    随着区块链技术的发展和应用的不断完善深入,市场的热情也开始活跃高涨,在万众期待下,NGK Global在英国伦敦的路演于7月25日圆满举办. 此次伦敦路演会议中众多行业精英,各社区代表.星盟投资公司资 ...