我打算在角色表(role)中添加一个帐号表(account)的外键(accountId),步骤如下:

1、首先在角色表(role)中添加列。

添加语句:alter table role add(accountid varchar2(50));

添加语句时注意事项:单词之间的空格必须为英文空格,不可为中文空格;accountId添加后不可
         设为主键!

2、将accountId这一列设为外键,链接角色表(role)和帐号表(account)。 
         添加语句:alter table role add constraint fk_role_account foreign key(accountId)

references account(id) on delete cascade;

或:

alter table role add constraint fk_role_account foreign key(accountId) references

account(id) on delete set null;

解释:constraint:约束,即外键约束。

fk_role_account:外键名称。

foreign key(accountId):将accountId设为外键。

references:参照。

account(id):account,帐号表明;id,外键accountId的参照列。

on delete cascade和on delete set null:两个要害字,第一个的意思就是当帐号删除的时候,
         所有角色表中accountId与删除帐号id相同的角色信息删除;第二个的意思就是当帐号删除的时候,所

有角色表中accountId与删除帐号id相同的角色accountId这一列清空。

3、在role.hbm.xml配置文件中添加多对一关系   
   代码如下:

<many-to-one name="account" class="com.yuanit.app.model.Account" update="false"
        insert="false" fetch="select">
                  <column name="ACCOUNTID" length="50" />
        </many-to-one>
   解释:
        <many-to-one name="对应一对多中一的实体类的集合的属性" class="一对多中一的实体类

的类名" update="false" insert="false" fetch="select">
                  <column name="对应其外键的字段" length="50" />
        </many-to-one>

4、在account.hbm.xml配置文件中添加一对多关系

代码如下:

<set name="roles" inverse="true" lazy="false" >
             <key>
                 <column name="ACCOUNTID" length="50"/>
             </key>
             <one-to-many class="com.yuanit.app.model.Role"/>
        </set>
    解释:
        <set name="对应一对多中多的实体类的集合的属性" inverse="true" lazy="false" >
             <key>
                 <column name="对应其外键的字段" length="50"/>
             </key>
             <one-to-many class="一对多中多的实体类的类名"/>
       </set>
5、在role的model中添加account集合及其set/get方法:

private Account account;

public void setAccount(Account account) {
           this.account = account;
       }

public Account getAccount() {
           return account;
       }
6、在account的model中添加roles集合及其set/get方法:

private Set<Role> roles = new HashSet<Role>(0);

public void setRoles(Set<Role> roles) {
          this.roles = roles;
       }

public Set<Role> getRoles() {
          return roles;
       }

Hibernate一对多(多对一)外键设置汇总的更多相关文章

  1. Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif

    Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif 一丶__str__ 和 __repr__ ...

  2. 测试脚本配置、ORM必知必会13条、双下划线查询、一对多外键关系、多对多外键关系、多表查询

    测试脚本配置 ''' 当你只是想测试django中的某一个文件内容 那么你可以不用书写前后端交互的形式而是直接写一个测试脚本即可 脚本代码无论是写在应用下的test.py还是单独开设py文件都可以 ' ...

  3. 六 Hibernate多表操作&级联&外键维护

    Hibernate的一对多关联映射 Hibernate的多对多关联映射 数据库表与表之间的关系:一对多,多对多,一对一 一对多:一个部门对应多个员工,一个员工只能属于一个部门.一个客户对应多个联系人, ...

  4. Python sqlalchemy orm 多对多外键关联

    多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...

  5. Django框架表关系外键-多对多外键(增删改查)-正反向的概率-多表查询(子查询与联表查询)

    目录 一:表关系外键 1.提前创建表关系 2.目前只剩 书籍表和 书籍作者表没创建信息. 3.增 4.删 5.修改 二:多对多外键增删改查 1.给书籍绑定作者 2.删 3.修改 4.清空 三:正反向的 ...

  6. Mysql 外键设置

    MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个:    一个是让数据库自己通过外键来保证数据的完整性和一致性    一个就是能够增加ER图的可读性    有些人认为外键的建立会给 ...

  7. Mysql外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL

    转: Mysql外键设置中的CASCADE.NO ACTION.RESTRICT.SET NULL 2017年06月11日 10:03:13 雅静8 阅读数:5491   版权声明:本文为博主原创文章 ...

  8. django开发中关于外键设置

    django开发中关于外键设置 我们建模型的时候会用到ForeignKey 而由于外键的约数会导致一些保存 所有我们ctrl+左键进入源码 源码 def __init__(self, to, on_d ...

  9. Hibernate一对多(多对一)关联关系

    上一篇博文总结了 Hibernate 的一对一的关联关系, 包括基于主键的单向一对一, 基于外键的单向一对一, 基于外键的双向一对一. 下面咱们说一下 Hibernate 的一对多关联关系. 其实一对 ...

随机推荐

  1. Spring Boot 项目本地运行无异常,部署到 Linux 服务器运行报错:java.lang.ClassNotFoundException

    一 背景 最近在用 Springboot 开发项目 A,引了小伙伴开发的模块 B,本地起服务,运行的好好的,等部署到服务器上,一运行就报错:Caused by: java.lang.ClassNotF ...

  2. JavaScript - Compiling Vs Transpiling

    参考 https://blog.csdn.net/napolunyishi/article/details/20473799 https://www.stevefenton.co.uk/2012/11 ...

  3. iOS开发应用上架必读最新苹果审核规则(史上最全版)

    官方文档 地址https://developer.apple.com/cn/app-store/review/guidelines/ App Store 审核指南 简介 App 正在改变世界,丰富人们 ...

  4. python 基础文件操作

    实时刷新到硬盘里 f= open('hh','w',encoding='utf8') f.write('gyftyftft') f.write('hghgh\njkkjk') f.flush()#实时 ...

  5. js 中一些重要的字符串方法

    String 对象方法 方法 描述 charAt() 返回在指定位置的字符. charCodeAt() 返回在指定的位置的字符的 Unicode 编码. concat() 连接两个或更多字符串,并返回 ...

  6. Linux:vi & vim(待学)

    VI编辑器_终端编辑器 目标 vi简介 打开和新建文件 三种工作模式 常用命令查询 1 简介 1.1 学习vi的目的 在工作中, 要对 服务器上的 文件进行 简单 的修改, 可以使用 ssh 登录到远 ...

  7. Educational Codeforces Round 72 (Rated for Div. 2)D(DFS,思维)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int n,m,k=1;int c[5007] ...

  8. Linux引导过程!(重点)

    1.开机自检:服务器开机后,将根据主板BIOS (基本输入系统),中的设置对CPU .内存.显卡.键盘等设备进行初步检测,并初始化部分硬件. 2.MBR 引导:当从本机硬盘中启动系统时,首先根据硬盘中 ...

  9. python学习 —— 使用QRCode包生成二维码

    我使用的是python3,最简单的方法就是使用QRCode,如果没有安装QRCode package,那么可以使用下面命令进行安装: pip3 install QRCode 然后,测试一下: from ...

  10. C++11 — lambda表达式(匿名函数)

    C++11中lambda表达式的基本语法格式为: [capture](parameters) -> return_type { /* ... */ } 其中 [] 内为外部变量的传递方式: [] ...