多对一(一对多)的双向关联

一个组(Group)有多个用户(User),进行多对一(一对多)的双向配置,在数据库中生成的表结构如下图:

  Annotation配置:

      Group:

 1 package com.bjsxt.hibernate;
 2 
 3 import java.util.HashSet;
 4 import java.util.Set;
 5 
 6 import javax.persistence.Entity;
 7 import javax.persistence.GeneratedValue;
 8 import javax.persistence.Id;
 9 import javax.persistence.OneToMany;
10 import javax.persistence.Table;
11 
12 @Entity
13 @Table(name="t_group")
14 public class Group {
15     private Integer id;
16     
17     private String name;
18     
19     private Set<User> users = new HashSet<User>();
20 
21     @Id
22     @GeneratedValue
23     public Integer getId() {
24         return id;
25     }
26 
27     public void setId(Integer id) {
28         this.id = id;
29     }
30 
31     public String getName() {
32         return name;
33     }
34 
35     public void setName(String name) {
36         this.name = name;
37     }
38 
39     @OneToMany(mappedBy="group")//表示和User是一对多的关系,并且以User的group属性为准,自己就不做映射配置了
40     public Set<User> getUsers() {
41         return users;
42     }
43 
44     public void setUsers(Set<User> users) {
45         this.users = users;
46     }
47 }

      User:

 1 package com.bjsxt.hibernate;
 2 
 3 import javax.persistence.Entity;
 4 import javax.persistence.GeneratedValue;
 5 import javax.persistence.Id;
 6 import javax.persistence.JoinColumn;
 7 import javax.persistence.ManyToOne;
 8 import javax.persistence.Table;
 9 
10 @Entity
11 @Table(name="t_user")
12 public class User {
13     private Integer id;
14     
15     private String name;
16     
17     private Group group;
18     
19     @Id
20     @GeneratedValue
21     public Integer getId() {
22         return id;
23     }
24 
25     public void setId(Integer id) {
26         this.id = id;
27     }
28 
29     public String getName() {
30         return name;
31     }
32 
33     public void setName(String name) {
34         this.name = name;
35     }
36 
37     @ManyToOne
38     @JoinColumn(name="group_ID")//指定列名为 group_ID
39     public Group getGroup() {
40         return group;
41     }
42 
43     public void setGroup(Group group) {
44         this.group = group;
45     }
46 }

    XML 配置:

      Group:

 1 package com.bjsxt.hibernate;
 2 
 3 import java.util.HashSet;
 4 import java.util.Set;
 5 
 6 public class Group {
 7     private Integer id;
 8     
 9     private String name;
10     
11     private Set<User> users = new HashSet<User>();
12 
13     public Integer getId() {
14         return id;
15     }
16 
17     public void setId(Integer id) {
18         this.id = id;
19     }
20 
21     public String getName() {
22         return name;
23     }
24 
25     public void setName(String name) {
26         this.name = name;
27     }
28 
29     public Set<User> getUsers() {
30         return users;
31     }
32 
33     public void setUsers(Set<User> users) {
34         this.users = users;
35     }
36 }
View Code

      Group.hbm.xml:

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 
 6 <hibernate-mapping package="com.bjsxt.hibernate">
 7     <class name="Group" table="t_group">
 8         <id name="id" column="id">
 9             <generator class="native"/>
10         </id>
11         <property name="name" column="name" />
12         <set name="users">
13             <key column="groupId"></key>
14             <one-to-many class="User"/>
15         </set>
16     </class>
17 </hibernate-mapping>

      User:

 1 package com.bjsxt.hibernate;
 2 
 3 public class User {
 4     private Integer id;
 5     
 6     private String name;
 7     
 8     private Group group;
 9     
10     public Integer getId() {
11         return id;
12     }
13 
14     public void setId(Integer id) {
15         this.id = id;
16     }
17 
18     public String getName() {
19         return name;
20     }
21 
22     public void setName(String name) {
23         this.name = name;
24     }
25 
26     public Group getGroup() {
27         return group;
28     }
29 
30     public void setGroup(Group group) {
31         this.group = group;
32     }
33 }
View Code

      User.hbm.xml

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 
 6 <hibernate-mapping package="com.bjsxt.hibernate">
 7     <class name="User" table="t_user">
 8         <id name="id" column="id">
 9             <generator class="native"/>
10         </id>
11         <property name="name" column="name" />
12         <many-to-one name="group" column="groupId"></many-to-one>
13     </class>
14 </hibernate-mapping>

    两个配置文件的 groupId 必须取名一致,否则会出现两个外键。

 

两种方式最后生成的SQL语句:

jar包链接: https://pan.baidu.com/s/1eSuw9Aq 密码: zrsy

开发链接: https://pan.baidu.com/s/1hsA73Ju 密码: 3q2b

转载于:https://www.cnblogs.com/ShawnYang/p/6737624.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

隧道不能访问web vxaln_SpringBoot实现本地存储文件上传及提供HTTP访问服务

笔者计划为大家介绍分布式文件系统&#xff0c;用于存储应用的图片、word、excel、pdf等文件。在开始介绍分布式文件系统之前&#xff0c;为大家介绍一下使用本机存储来存放文件资源。二者的核心实现过程是一样的&#xff1a;上传文件&#xff0c;保存文件(本节是本地磁盘)返回…

修改form_Vue通过阿里云oss的url连接直接下载文件并修改文件名

我测试过很多遍,想要通过a标签的形式来直接点击url下载文件并重命名但是都失败了,最终只能下载却不能重命名 所以 换了java后台来修改名字.以下代码我做的网页是点击文件直接下载直接下载下来了,一开始的文件名是上传到oss时以id命名的名字,现在下载的时候想改名,遇到了问题,所…

STM32学习笔记(五)——通用定时器计数延时

STM32定时器概述 STM32F40x系列总共最多有14个定时器&#xff0c;定时器分为三类&#xff1a;基本定时器、通用定时器和高级定时器。它们的都是通过计数来达到定时的目的&#xff0c;和51的定时器差不多&#xff0c;基本原理都是一样的&#xff0c;就是功能多了一些&#xff0c…

第十九讲:职责链模式

public class CarBodyHandler extends CarHandler{Overridepublic void HandlerCar() {// TODO Auto-generated method stubSystem.out.println("组装车身");}} public abstract class CarHandler {public abstract void HandlerCar(); } public class CarHeadHandle…

四阶行列式直接展开_四阶行列式的完全展开式共有多少项

展开全部 共24项。 1.将该行列式前三列重复书写在该行列式的右边,可在前四列中作出两条对角线,然e5a48de588b662616964757a686964616f31333365663463后在此七列中作出相应的平行线,可得(图表一) 2.作乘积关系,可得如下八项: a11a22a33a44,a12a23a34a41,a13a24a31a42,a14a2…

c++ 返回智能指针_C++核心指南(17) I.11 禁止使用指针(T*)或引用(T)来转移所有权...

I.11: 永远不要使用原始指针(T*)或引用(T&)来转移所有权原因如果对调用者或被调用者是否拥有对象有任何疑问&#xff0c;就会发生泄漏或过早析构。示例考虑:X* compute(args) // 不要这样做 { X* res new X{}; // ... return res; }谁来删除返回的X&#xff1f;当compute返…

mysql8.0.13 32位下载_MySQL8.0下载-MySQL数据库8.0下载 v8.0.11官方版(32位/64位)--pc6下载站...

mysql是一款数据库管理系统&#xff0c;mysql一般网站开发者或者数据库开发者会用到&#xff0c;mysql拥有体积小巧、读取和存储速度快的特点&#xff0c;新版本完全脱了MylSAM存储引擎&#xff0c;改善了扫描性能&#xff0c;同时还重构了sql分析器&#xff0c;赶快下载使用吧…

手游产品经理初探(三)产品中的玩家行为

国内做手游的团队非常多都是一大抄&#xff0c;但非常多时候我们都没有抄到核心的东西&#xff0c;所谓的形象神不象就是这样。那么我们来看一个案例&#xff1a;这个界面是big fish做的玩家送礼物的画面。我们知道在社交类的游戏里面这是一个非经常见的功能&#xff0c;但非常…

mysql ndb是什么_MySQL NDB Cluster介绍

最近翻译了好几篇关于NDB的文章&#xff0c;相信有很多人会有疑问&#xff0c;NDB Cluster究竟是个什么东西&#xff1f;它是一款新产品吗&#xff1f;它和InnoDB Cluster有什么不同&#xff1f;它是MySQL吗&#xff1f;它怎么使用&#xff1f;在这篇文章里&#xff0c;我将为大…

orm和mysql_orm与mysql

一. orm执行原生sql语句在模型查询API不够用的情况下&#xff0c;我们还可以使用原始的SQL语句进行查询。Django 提供两种方法使用原始SQL进行查询&#xff1a;一种是使用raw()方法&#xff0c;进行原始SQL查询并返回模型实例&#xff1b;另一种是完全避开模型层&#xff0c;直…

课程作业2

作业二 题目 编写一个程序&#xff0c;要求根据给定的圆的半径求圆的面积&#xff0c;并将求得的结果打印出来。 要求&#xff1a; 输入输出采用cin和cout。 建立一个工程&#xff0c;将程序写成两个.cpp和一个.h的形式。 要求程序必须要对变量的定义和各个函数模块进行注释。 …

webform中提交按钮同时执行更新和插入操作_软件测试中的功能测试点(三)

26.输入法半角全角检查再输入信息中&#xff0c;输入一个或连串空格&#xff0c;查看系统如何处理&#xff0c;如对于要求输入符点型数据的项中&#xff0c;输入全角的小数点&#xff08;“。”或“.”&#xff0c;如4.5&#xff09;&#xff1b;输入全角的空格等。 27.密码检查…

PAT甲题题解-1091. Acute Stroke (30)-BFS

题意&#xff1a;给定三维数组&#xff0c;0表示正常&#xff0c;1表示有肿瘤块&#xff0c;肿瘤块的区域>t才算是肿瘤&#xff0c;求所有肿瘤块的体积和 这道题一开始就想到了dfs或者bfs&#xff0c;但当时看数据量挺大的&#xff0c;以为会导致栈溢出&#xff0c;所以并没…

python如何获取请求的url_听说你在学习:如何通过代码请求URL地址

最近比较忙碌&#xff0c;都没有时间更新公众号文章&#xff0c;表示比较惭愧。最近翻看了一下自己的博客&#xff0c;发现这篇文章的内容还是挺实用&#xff0c;所以&#xff0c;想分享给大家&#xff0c;欢迎阅读。在后续&#xff0c;我会从一个范围的角度进行编写一系列文章…

在sql中将表建在别的构件中用什么语句_SQL实战

学习主题&#xff1a;SQL学习目标&#xff1a;1 掌握子查询1. 什么是子查询(1) 什么是子查询&#xff1f;答&#xff1a;当一个查询是另一个查询的条件时&#xff0c;称之为子查询。简而言之&#xff1a;嵌套查询(2) 子查询执行的顺序是什么&#xff1f;答&#xff1a;先进行内…

数据结构入门之链表(C语言实现)

这篇文章主要是根据《数据结构与算法分析--C语言描述》一书的链表章节内容所写&#xff0c;该书作者给出了链表ADT的一些方法&#xff0c;但是并没有给出所有方法的实现。在学习的过程中将练习的代码记录在文章中&#xff0c;并添加了一些在测试中需要的函数&#xff0c;因此可…

php 验证码需开启gd2

转载于:https://www.cnblogs.com/zhangj391/p/6794555.html

python中如何将字典直接变成二维数组_python基础知识(列表、字典、二维数组)...

记得改参数&#xff01;&#xff01;&#xff01;(1)简述列表(list)结构的特点。List(列表)List的元素以线性方式存储&#xff0c;可以存放重复对象&#xff0c;List主要有以下两个实现类&#xff1a;ArrayList : 长度可变的数组&#xff0c;可以对元素进行随机的访问&#xff…

mysql动态代理_超全MyBatis动态代理详解(绝对干货)

前言假如有人问你这么几个问题&#xff0c;看能不能答上来Mybatis Mapper 接口没有实现类&#xff0c;怎么实现的动态代理JDK 动态代理为什么不能对类进行代理(充话费送的问题)抽象类可不可以进行 JDK 动态代理(附加问题)答不上来的铁汁&#xff0c;证明 Proxy、Mybatis 源码还…

python pygame鼠标点击_Python中pygame的mouse鼠标事件用法实例

本文实例讲述了Python中pygame的mouse鼠标事件用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;pygame.mouse提供了一些方法获取鼠标设备当前的状态pygame.mouse.get_pressed - get the state of the mouse buttons get the state of the mouse buttonspygame.mous…