Hibernate双向关联插入数据时候的怪问题

简单描述一下表结构:主表Team,从表Player,建立外键关联。

以下是HBM文件:

Team:

<hibernate-mapping></hibernate-mapping>

xml 代码
  1. <hibernate-mapping>  
  2.     <class name="com.hibernatedemo.model.Team" table="team" catalog="hibernatedemo">  
  3.         <comment></comment>  
  4.         <id name="id" type="string">  
  5.             <column name="id" length="32" />  
  6.             <generator class="assigned" />  
  7.         </id>  
  8.         <property name="name" type="string">  
  9.             <column name="name" length="32" not-null="true">  
  10.                 <comment></comment>  
  11.             </column>  
  12.         </property>  
  13.         <set name="players" inverse="true" cascade="all">  
  14.             <key>  
  15.                 <column name="team" length="32" not-null="true">  
  16.                     <comment></comment>  
  17.                 </column>  
  18.             </key>  
  19.             <one-to-many class="com.hibernatedemo.model.Player" />  
  20.         </set>  
  21.     </class>  
  22. </hibernate-mapping>  



Palyer:

<hibernate-mapping></hibernate-mapping>

xml 代码
  1. <hibernate-mapping>  
  2.     <class name="com.hibernatedemo.model.Player" table="player" catalog="hibernatedemo">  
  3.         <comment></comment>  
  4.         <id name="id" type="string">  
  5.             <column name="id" length="32" />  
  6.             <generator class="assigned" />  
  7.         </id>  
  8.         <many-to-one name="team" class="com.hibernatedemo.model.Team" fetch="select">  
  9.             <column name="team" length="32" not-null="true">  
  10.                 <comment></comment>  
  11.             </column>  
  12.         </many-to-one>  
  13.         <property name="name" type="string">  
  14.             <column name="name" length="32" not-null="true">  
  15.                 <comment></comment>  
  16.             </column>  
  17.         </property>  
  18.         <property name="gender" type="java.lang.Boolean">  
  19.             <column name="gender">  
  20.                 <comment></comment>  
  21.             </column>  
  22.         </property>  
  23.         <property name="birthday" type="date">  
  24.             <column name="birthday" length="10">  
  25.                 <comment></comment>  
  26.             </column>  
  27.         </property>  
  28.     </class>  
  29. </hibernate-mapping>  

 

插入数据的代码如下:

java 代码
  1. Transaction tx = session.beginTransaction();   
  2.         for(int i=0;i<2;i++) {   
  3.             Team team = new Team();   
  4.             team.setId("Team" + new Integer(i).toString());   
  5.             team.setName(team.getId());   
  6.             Set <player></player>  players = new HashSet <player></player> ();   
  7.             for(int j=0;j<10;j++) {   
  8.                 Player player = new Player();   
  9.                 player.setId("Player" + team.getId()+"."+new Integer(j).toString());   
  10.                 player.setName(player.getId());   
  11.                 player.setBirthday(new Date());   
  12.                 player.setGender(true);   
  13.                 player.setTeam(team);   
  14.                 players.add(player);   
  15.             }   
  16.             team.setPlayers(players);   
  17.             session.save(team);   
  18.         }   
  19.         tx.commit();  

 

执行代码,SQL打印如下:

Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: select player_.id, player_.team as team1_, player_.name as name1_, player_.gender as gender1_, player_.birthday as birthday1_ from hibernatedemo.player player_ where player_.id=?
Hibernate: insert into hibernatedemo.team (name, id) values (?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.team (name, id) values (?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)
Hibernate: insert into hibernatedemo.player (team, name, gender, birthday, id) values (?, ?, ?, ?, ?)

 

问题是:为什么在insert语句之前,会执行select语句,对player进行查询呢?请指教

Hibernate多对多关联添加及查询示例 立即下载

相关推荐

残差检验_第三十讲 R语言-Cox比例风险模型的假设检验条件

在介绍完 Cox比例风险模型的详细理论和R实现以后(插入链接!!!),我们已经知道Cox比例风险模型可以较好的同时矫正多个混杂因素对结果的影响,同时我们遗留下来了一个问题:Cox比例风险模型的假设检验条件是什么?这一讲,我们将对此进行解答。请注意,如果使用不当,统计模型可能会产生误导性的结论。因此,检查给定的模型是否适合数据类型是非常重要的!1. Cox比例风险模型的假设条件Cox比例风险模型的成...

weixin_35476698的博客 8048

初识Hibernate之关联映射(一)

上篇文章我们对持久化对象进行的学习,了解了它的三种不同的状态并通过它完成对数据库的映射操作。但这都是基于单张表的操作,如果两张或者两张以上的表之间存在某种关联,我们又该如何利用持久化对象进行操作呢?本篇主要介绍的关联映射就是针对有着某种关联的多张表的各种操作,主要涉及内容如下: 组合主键的映射 组件的映射 单向多对一的映射 单向一对多的映射 双向一对多的映射 级联映射 一、组合主键的...

weixin_30900589的博客 105

软件破解逆向安全(一)初识内存地址和偏移

工具:CE 内存:数字->存访在电脑中->内存 实例:如何修改植物大战僵尸阳光 内存搜索最核心:过滤数据 先用CE加载植物大战僵尸,如下图 我们可以看到目前我们的阳光数是50,我们尝试在ce里搜索精确数值,4 byte是int整数的表示。 我们发现有很多数据,尝试收集一个阳光变成75再次搜索: 我们发现就一个了,这时我们可以双击Value随便修改阳光的数值了。 这里我们说一下动态和静态地址 动态地址:临时用于存放数据的地址,黑色。特征:重新启动游戏地..

weixin_43781139的博客 2597

hibernate级联操 同时向2张表插入数据(一对多的关联,一个简单的例子说明)

一、在emp配置中和dept配置中要同时维护好多对一和一对多的关系。        Emp部门表中有个属性是将dept这个对象作为属性的。        在dept中是有一个hashSet集合属性的,因为一个部门有多个员工,所以在部门表中放了一个一emp对象为泛型的hashSet集合 [java] view plain copy   p

pwh309315228的博客 8182

matlab从无到有系列(九):Simulink基础仿真详解(全网最全,从入门到放弃)

🔗 运行环境:Matlab 🚩 作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 📚 选自专栏:《数学建模》 🧿 优秀专栏:《Matlab神经网络案例分析》 目前持续更新的专栏: 🥇 专栏:Matlab GUI编程技巧 🔥 专栏:Matlab从无到有系列 📚 专栏:《数学建模》 💗 大家好,我是左手の明天!💗 📆 最近更新:2022 年 4 月 2 日,左手の明天的第215 篇原创博客 🌟🌟往期必看🌟🌟 matlab从无到有系列(二):矩阵运算基础...

左手の明天的博客 9万+

ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储

ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储 508A内部存储区介绍 Data Zone Config Zone 508A Config Zone配置(自定义) - ATECC508A芯片在使用之前,需要自定义配置ConfigZone与DataZone,并同Lock命令将两个区域锁住,否则无法正常使用功能。而一旦锁上就是永久性的,配置区不能够进行解锁

HowieXue 薛永浩的博客 2万+

hibernate多对多关联数据插入

多对多数据插入,当创建其中多的一端,把另一个多的一端关联进去,当时一直没有把数据插入到中间表中,也不报错,压根没执行插入语句,最后发现是Replygroup的映射文件的inverse="true",因为我是从replygroup这段插入数据而inverse有被设置为true所以一直无法插入到中间表中。后来将其放到关联表中就行了 Service中保存数据的代码段,其中teacherId

qq_29631069的博客 503

R数据分析:潜在剖面分析LPA的做法与解释

Latent Profile Analysis (LPA) tries to identify clusters of individuals (i.e., latent profiles) based on responses to a series of continuous variables (i.e., indicators). LPA assumes that there are unobserved latent profiles that generate patterns of resp.

Codewar的博客 1万+

hibernate多表操作

1. 多表操作—插入操作 @Test public void test1() { Session session = HibernateUtil.getSession(); session.beginTransaction(); //操作 //1.创建2个学生 Student s1 = new Student(); s1.setName("zhangsan"); Student s2 = new Student(); s2.setName(

林深不见鹿 691

STM32入门教程:水位传感器应用

这是一个简单的STM32水位检测系统的入门教程。希望通过学习本教程,您能对STM32微控制器的基本应用有更深入的了解,并能成功构建一个水位检测系统。如果您需要更详细的代码实例和教程,请参考相关的STM32开发手册和应用笔记。STM32是一款功能丰富且广泛应用于嵌入式系统的微控制器系列。在本教程中,我们将介绍如何使用STM32微控制器和水位传感器构建一个水位检测系统。

wx_linying1029的博客 534

探索gtwr of mgtwr in python

代码】探索gtwr of GWmodel in python。

m0_46268055的博客 3388

hibernate中如何向关联表中插入数据,或者更新关联表数据

private Integer ssId; private Students students; private Studytime studytime; private Project project; private Integer score;

Dreamer的专栏 5584

Unity之Hololens2开发MRTK Profile详解

配置 MRTK 的主要方式之一是使用基础包中的配置文件。场景中的主要对象具有活动配置文件 - 一个 ScriptableObject。顶级 MRTK 配置配置文件包含主核心系统的每个核心的子配置文件数据,每个主核心系统都旨在配置其相应子系统的行为。此外,这些子配置文件也是 ScriptableObjects,因此可以包含对低它们一级的其他配置文件对象的引用。实质上,有一个包含已连接配置文件的完整树,这些配置文件构成了如何初始化 MRTK 子系统和功能的配置信息。

TxNet 1036

Hibernate一对一双向关联

一对一映射有两种方式:主键关联和外键关联。 以User类和IdCard类为例,用户和身份证是一对一的双向关联关系。 持久化类User: public class User { private Long id; private String name; private IdCard idCard; //省略set、get方法 }持久化类IdCard: public class

jialinqiang的专栏 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Hibernate多对多双向关联,Annotation与映射文件方式。解决中间表无法插入数据。

设计员工,岗位关系,多对多双向关联。类图:用Hibernate创建的表图:实体类:public class User { private Long id; private Set<Role> roles = new HashSet<Role>(); } public class Role { private Long id; private Set<User> use

JYH1314的博客 2106

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Hibernate:one-to-many(一对多)关联映射详解

对one-to-many关联映射进行论述

SirouW的博客 3477

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Hibernate外键一对一单向和双向关联的理解

Hibernate外键一对一单向和双向关联的理解

御风问情 773

Hibernate:one-to-one(一对一)关联映射详解

对one-to-one关联映射进行详细的叙述

SirouW的博客 3021

Hibernate:many-to-many(多对多)关联映射详解

多对多关联映射的实现和使用

SirouW的博客 1767

Hibernate中双向一对多关联关系

前边我们讲过了单向多对一的关联关系,即在Java代码-hbm.xml配置文件-数据库表格中只是描述了一种类中多个对象可以对应一个其他类对象的关联关系。我们需要在一个类中含有另一个类的引用变量,然后在包含类的hbm.xml文件中描述这个属性变量对应的外键和另一张表格中的主键的关联关系,使用来描述这种关系,然后执行程序就会在数据库中自动生成这种单向一对多的关联关系。   今天我们来讲一讲基于上面的单

qq792020962的博客 326

一对多的双向关联

在上一个帖子我们说到了一对多的单项关联,那么我现在来说一下一对多的双向关联。单向关联就像是充分不必要条件(从左推右可以,从右推左不可以)。那么双向关联,顾名思义,就是充要条件了。 要建立双向关联,首先我们要在单向关联的基础上,在“不必要”的那一端(在这里是多的一方),多加一个“充分条件”(在这里是一的那一端)的属性。 此时student类修改成这样:public class Student im

2106

【Hibernate步步为营】--(一对多映射)之双向关联

单向关联的一对多映射,在一的一端维护双向的关系这种做法虽然能实现但是存在很多缺陷,首先生成很多多余的SQL语句,因为多的一端不维护关系,只有一的一端维护,在进行操作时一的一端会发出多余的update语句;其次,因为多的一端不知道一的一端存在,所以在保存多的一端时如果外键为null值,并且在设计数据库时关系字段设为非空,则将无法保存数据。因为单向关联一对多存在很多缺点那就没有其它的办法了吗,可以采用双向关联来优化

航帆远洋 7442

hibernate多对一关联和一对多关联

1. 多对一的单向关联 从订单(order)到客户(customer)的单向关联 (多个订单对应一个客户) JavaBean: Customer public class Customer{ private Integer id; private String name; } JavaBean: Order public class Customer{ private Integ

技术人生 2808

Hibernate JPA 关联关系

Hibernate JPA 关联关系 关联关系从整体上分为单向关联和双向关联: 单向关联:只需从一端访问另一端,如教师Teacher可访问学生Student,则Teacher实体需要包含类型为Student的属性 双向关联:两端均可互相访问,如教师Teacher可访问学生Student,学生Student也可访问教师Teacher,两个实体均需要包含类型为对方的属性 1、一对一关联映射 1.1、单向一对一 单向1-1:需要在控制关系的一方实体中使用注解 @OneToOne 和 @JoinColumn 标

路边烧卖 538

数据库表设计什么时候用怎么用双向关联

提问: 我刚学hibernate里面讲了双向关联,我设计了表student 字段id,name,teacherid,teacher表字段id,name,studentid teacherid关联teacher的id,studentid关联student表的id,然后我想插入其中一张表的时候,无法插入数据 报错信息:Cannot add or update a child row: a f...

weixin_30726161的博客 381

Hibernate中的Entity类之间的ManyToMany关联

Hibernate中的Entity类之间的ManyToMany关联,必须在数据库模式中有一个中间连接表,其中的外键作为两个实体表之间的桥梁;而实体表中没有外键。 1. ManyToMany单向关联 任选一个实体类作为owning side,设置关联如下: @Entity(name = "Person") public static class Person { @Id @G

成长的足迹 3028
上一篇: 关于常量类使用的一个问题。
下一篇: 关于Hibernate加载数据时的CGLIB动态代理的奇怪问题。
johnnylzb
博客等级 码龄24年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值