- 浏览: 329527 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (211)
- Java IO (3)
- Struts (13)
- Hibernate (19)
- Spring (9)
- jQuery (2)
- Extjs (8)
- Flex (1)
- Oracle (4)
- ibatis (3)
- SQL (0)
- WorkFlow (0)
- Java Core (14)
- Ant&Maven (18)
- Java Thread (0)
- Java Socket (1)
- Java OO (2)
- Javascript (14)
- CSS&Div (2)
- MYSQL (3)
- MSSQL (0)
- Design Pattern (3)
- Data Structure&Algorithm (1)
- Source Analysis (0)
- OSGi (3)
- Linux (7)
- Network (1)
- 百无聊赖 (9)
- English (5)
- Japaness (0)
- French (0)
- Webservice (3)
- 考试认证 (0)
- C/C++ (1)
- 小题目 (1)
- Server (1)
- JSP&Servlet (18)
- JDBC (8)
- JMS (3)
- JNDI (0)
- 软件工程 (2)
- 项目管理 (2)
- UML (0)
- 文档翻译 (0)
- 架构之美 (1)
- EJB (0)
- DataBase Design (1)
- DataBase (1)
- Framework Integration (2)
- JPA (2)
- Daily Reading (8)
- 通用组件设计 (3)
- Spring DM (1)
- Spring MVC (0)
- Spring Security (0)
- 时间管理 (0)
- 成本管理 (1)
- 进度管理 (0)
- 质量管理 (0)
- 范围管理 (0)
- 环境配置 (5)
- 敏捷开发 (0)
- DB2 (2)
- 持续集成 (1)
- JVM性能调优 (2)
- Weblogic (0)
- PHP (1)
- Websphere (2)
最新评论
-
di1984HIT:
写的很好,谢谢。。
【转载】【权限控制】角色访问动态生成用户权限菜单树 -
paladin1988:
wangxuehui 写道我昨天也参加视频面试,视频面试2个人 ...
阿里巴巴面试感想 -
wangxuehui:
我昨天也参加视频面试,视频面试2个人,最后都听我说完啦,最后我 ...
阿里巴巴面试感想 -
paladin1988:
liwei113114 写道请问一下,你们最后是怎么解决tld ...
OSGi动态拔插,动态部署,动态权限菜单 -
liwei113114:
请问一下,你们最后是怎么解决tld那个问题的?
我现在也遇到这 ...
OSGi动态拔插,动态部署,动态权限菜单
文章来源:http://www.iteye.com/topic/786535
作者:lijiejava
一对多双向关联(类Item与类Bid):
Item类:
public class Item { private int id; private String name; private Set bids = new HashSet(); ,,, }
Bid类:
public class Bid { private int id; private double amount; private Item item; ... }
Item.hbm.xml:(t_item表)
<hibernate-mapping> ••• <set name="bids" table="t_bid" cascade="save-update"> <key column="item_id" not-null="true"/> <one-to-many class="value.Bid"/> </set> ••• </hibernate-mapping>
Bid.hbm.xml: (t_bid表)
<hibernate-mapping> ••• <many-to-one name="item" class="value.Item" column="item_id" not-null="true" /> ••• </hibernate-mapping>
测试代码:
••• Item item = new Item(); item.setName("item"); Bid b1 = new Bid(); b1.setAmount(12.09); b1.setItem(item); Bid b2 = new Bid(); b2.setAmount(11.98); b2.setItem(item); Set bids = new HashSet(); bids.add(b1); bids.add(b2); item.setBids(bids); session.beginTransaction(); session.save(item); session.getTransaction().commit();
这是以前的一个"一对多双向关联",今天运行时抛出了如下异常:
Exception in thread "main" java.lang.ExceptionInInitializerError ••• Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: value.Bid column: item_id (should be mapped with insert="false" update="false")
仔细检查了映射文件,发现在Item.hbm.xml配置文件的<key>元素中多了一个not-null="true"限制,将其去掉后就可以正常运行。
(1)
加入not-null="true"意味着什么?
由<key>元素定义的列映射item_id是t_bid表的外键列。加入not-null="true"之后,意味着如果要增加
t_bid表中的记录,那么外键列item_id一定不能为null,Item端为了确保item_id字段不为null(Item端不知道Bid端的情
况,所以它不可能依赖Bid端来确保item_id不为空),会在t_bid的插入语句中为该字段赋值。
事实上,不论是单向一对多还是双向一对多,只要在<key>元素中设置了not-null="true",那么在t_bid表的insert语句中都会增加column属性所指定的列(此处即item_id),以此确保item_id列不为空。
以
单向一对多关联为例:如果未设定not-null="true",那么输出的语句为:Hibernate: insert into t_bid
(amount) values (?);而如果设定了not-null="true",那么输出的语句就是:Hibernate: insert
into t_bid (amount, item_id) values (?, ?) 。
(2)
抛出异常的原因?
异常的原因可以从异常信息中看出,即字段重复。通过(1)中的分析,可以很清楚地明白其中的原因。查看Bid.hbm.xml映射文件:
<many-to-one name="item" class="value.Item" column="item_id" not-null="true" />
可以看出,这是一个多对一关联,not-null="true"表明一个Bid肯定有其对应的Item实体。column属性指定t_bid表中item_id列是t_item表主键的一个外键。对于Bid而言,不论是否指定了not-null="true",它的insert语句都会为item_id字段赋值,即使为null。
这就是异常产生的原因,这样的设置会使Hibernate发出类似 insert into t_bid (item_id,item_id) values (•••)的语句,所以会提示重复字段异常。
(3)
解决:
1. 把<key>元素中的not-null="true"去掉,事实上在双向关联中根本不需要由Item端来确保外键列item_id不为null。
2. 可以按照提示,在Bid.hbm.xml映射文件中加入insert="false" update="false"。
加入这两个限制,意味着对t_bid表的insert与update操作中不包含这个字段
,这样可避免重复。
3. 在Item.hbm.xml中的<set>元素内加入inverse="true",将关联关系全部交给Bid端。http://lijiejava.iteye.com/blog/776587
4. 最无聊的方法:将<key>元素中的column值改成item_id_1等,不与item_id重复,这样会导致数据表字段的冗余,不应该使用。
在实际应用中,不应该在<key>中加入not-null="true"限制。
=================================================================
这个问题再写XML和注解的时候否碰到过,而且非常的频繁。
通过这篇帖子,也再次说明了,数据库中的外键是可以为空的。
下面是关于数据库外键的几篇帖子:
http://topic.csdn.net/u/20070525/00/523a0ee7-6d80-404d-ab70-fdd4920b9c45.html
http://blog.csdn.net/wkupaochuan/article/details/7633173
http://gwj41.iteye.com/blog/643467
发表评论
-
Hibernate非空属性保存异常
2013-05-21 13:24 1249错误描述: Caused by: org.hi ... -
Hibernate读取错误
2013-05-21 13:22 805错误如下: Caused by: com.da ... -
【转】The user must supply a JDBC connection
2012-08-27 01:12 3361The user must supply a JDBC con ... -
Hibernate Annotation小记
2012-08-22 23:43 907老实说,Hibernate Annotation用起来 ... -
Hibernate Annotation 基于外键的一对多双向关联
2012-08-22 23:44 4187纠结了好久呀,因为没有set,关联关系没有保存对,导致插入数据 ... -
Hibernate Annotation 唯一外键一对一双向关联
2012-08-20 22:38 1087继续上面的东西,修改下数据库脚本,把共享主键中的Pro ... -
【转】attempted to assign id from null one-to-one
2012-08-20 21:59 842one-to-one在hibernate中可以用来作为两张 ... -
Hibernate Annotation 共享主键一对一双向关联
2012-08-20 21:59 5978写了这么几篇都是单向的关联,干脆后面的都写双向关联吧, ... -
Hibernate Annotation 基于连接表的单向一对多关联
2012-08-17 00:29 2265趁着今晚把一对多一起搞了吧,呵呵。。 一对多的关 ... -
Hibernate的一对多关联方式
2012-08-17 00:29 853之前阅读Hibernate reference的时候看 ... -
Hibernate Annotation 基于外键的单向一对多关联
2012-08-17 00:30 1549基于外键关联的单向一对多关联是一种很少见的情况,并不推荐使用。 ... -
Hibernate Annotation 基于外键的单向多对一关联
2012-08-16 01:26 2921其实一对多和多对一是一样的,只是看问题的角度不同。 ... -
Hibernate Annotation入门
2012-08-15 19:40 1611废话不多说,直接上例子(附件) 数据库脚本: ... -
Hibernate 1+N问题的原理与解决
2012-08-13 20:46 1251什么时候会遇到1+N ... -
【转】Hibernate获取记录总数
2012-08-13 20:41 1148hql获取记录条数 Str ... -
Hibernate基于连接表的一对多单向关联
2012-08-09 23:13 1463基于连接表,顾名思义就是需要建立中间表来保存两个表的关联关系。 ... -
Hibernate基于外键的一对多单向关联
2012-08-09 21:42 2019一对多,一个分类Category下有多个Product,从Ca ... -
Hibernate使用注解
2012-08-04 01:37 1073//类标志 @Entity @Table(name = & ...
相关推荐
( org.hibernate.MappingException: Repeated column in mapping for entity:YOUR_ENTITY ),因为表databsae不能具有重复的列名。 JPA定义了@AttributeOverride批注来处理此senario。 @AttributeOverrides({ @...
nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: com.xindeco.myregister.pojo.MyRegisterInfo column: password (should be mapped with insert="false" update=...
在protobuf中,`repeated`限定修饰符是一个非常重要的概念,用于表示一个字段可以有多个值,类似于数组或列表。本文将深入探讨`repeated`限定修饰符的使用及其相关知识点。 首先,我们需要理解protobuf的基本语法。...
本篇文章将详细解释如何在C语言环境中使用protobuf-c处理`repeated`字段,创建数组和字符串,并特别关注`pb_callback_t`这一特殊类型。 首先,我们需要理解`repeated`字段在protobuf语义中的含义。在protobuf的定义...
Column 13: Set representations for the problem in Column 12 sets.cpp -- Several data structures for sets. genbins.c (Column 9) implements the bin data structure in C. Column 14: Heaps priqueue....
在心理学研究方法中,**重复测量方差分析(Repeated Measures ANOVA)**是一种常用的统计方法,用于处理涉及同一组参与者在不同时间点或不同条件下的数据。这种方法能够有效地控制个体差异的影响,从而更准确地评估...
Docker-in-Action.pdf In 2011, I started working at Amazon.com. In that first week my life was changed as I learned how to use their internal build, dependency modeling, and deployment tool- ing. This ...
y: Analysis of Conflict+Game Theory for Applied Economists:北大光华学习资料,翁盒老师主讲 高级微观经 济专题 北大光华 翁翕老师主讲 Topics in Advanced Micro economics 更详细的内容,请参考下面的“内容...
博客中测试代码 【Protocol Buffer】Protocol Buffer入门教程(五):repeated限定修饰符 博客网址:https://blog.csdn.net/dengjin20104042056/article/details/102465638
The newly typed text will be repeated on each line of the column selection. You can now increase or decrease the editor font size by pressing Ctrl +/- on the numeric keypad. The "Go to line" function...
3.5.1 Mapping: Calling Each Value by a Name 54 3.5.2 Operating with Dictionaries 56 3.6 SETS 59 3.6.1 Unordered Collection of Objects 59 3.6.2 Set Operations 60 3.6.3 Shared Operations with Other Data...
- **《Moyé: Multiple Analyses in Clinical Trials: Fundamentals for Investigators》**:讨论临床试验中多重假设检验的策略和方法,防止I型错误累积。 ### 分子进化统计方法 - **《Nielsen: Statistical ...
Bug with TMyDump.BackupQuery repeated call is fixed 7.5.9 05-Sep-12 Rad Studio XE3 is supported Windows 8 is supported Bug with storing empty MapRules collection in DFM is fixed Bug with AV ...
Incentive MeIncentive Mechanism for Cooperative Content Discovery in Mobile Wireless Networks: A Repeated Cooperative Game-theoretic Approach
dbForge Studio for SQL Server is a powerful IDE for SQL Server management, administration, development, data reporting and analysis. The tool will help SQL developers to manage databases, speed up ...
定义protobuf文件(包含enum,message,required,optional,repeated, 结构体定义中引用另一个结构体), 生成java文件,能够构建java对象,并转化为字节byte或者流,能够将流或字节转化为对象
本文将根据提供的研究论文摘要内容,详细阐述如何构建含有重复元素(如教室中的多个桌椅组合)的3D场景层次结构,并探讨该方法的重要性和具体实现步骤。 #### 研究背景与动机 当前,由大量真实模型构成的3D场景...
关于protobuf的反射特性可以参照这篇文章 ...代码中也对关键处理步骤进行了注释说明,相信有了这个实例后json、pb相互转换对你来说将变得一目了然。 使用过程如果有问题可以私信博主,我看到后会第一时间解答。
The encoding process in Shoshanna Llewellyn's thesis involves mapping digital data into DNA codewords, carefully designed to avoid the aforementioned issues. The use of a graph-based approach allows ...
SPSS Data Analysis for Univariate, Bivariate, and Multivariate Statistics By 作者: Daniel J. Denis ISBN-10 书号: 1119465818 ISBN-13 书号: 9781119465812 Edition 版本: 1 出版日期: 2018-09-25 pages 页数:...