- 浏览: 331384 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (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 1252错误描述: Caused by: org.hi ... -
Hibernate读取错误
2013-05-21 13:22 811错误如下: Caused by: com.da ... -
【转】The user must supply a JDBC connection
2012-08-27 01:12 3369The user must supply a JDBC con ... -
Hibernate Annotation小记
2012-08-22 23:43 911老实说,Hibernate Annotation用起来 ... -
Hibernate Annotation 基于外键的一对多双向关联
2012-08-22 23:44 4191纠结了好久呀,因为没有set,关联关系没有保存对,导致插入数据 ... -
Hibernate Annotation 唯一外键一对一双向关联
2012-08-20 22:38 1093继续上面的东西,修改下数据库脚本,把共享主键中的Pro ... -
【转】attempted to assign id from null one-to-one
2012-08-20 21:59 849one-to-one在hibernate中可以用来作为两张 ... -
Hibernate Annotation 共享主键一对一双向关联
2012-08-20 21:59 5989写了这么几篇都是单向的关联,干脆后面的都写双向关联吧, ... -
Hibernate Annotation 基于连接表的单向一对多关联
2012-08-17 00:29 2273趁着今晚把一对多一起搞了吧,呵呵。。 一对多的关 ... -
Hibernate的一对多关联方式
2012-08-17 00:29 860之前阅读Hibernate reference的时候看 ... -
Hibernate Annotation 基于外键的单向一对多关联
2012-08-17 00:30 1554基于外键关联的单向一对多关联是一种很少见的情况,并不推荐使用。 ... -
Hibernate Annotation 基于外键的单向多对一关联
2012-08-16 01:26 2930其实一对多和多对一是一样的,只是看问题的角度不同。 ... -
Hibernate Annotation入门
2012-08-15 19:40 1616废话不多说,直接上例子(附件) 数据库脚本: ... -
Hibernate 1+N问题的原理与解决
2012-08-13 20:46 1258什么时候会遇到1+N ... -
【转】Hibernate获取记录总数
2012-08-13 20:41 1154hql获取记录条数 Str ... -
Hibernate基于连接表的一对多单向关联
2012-08-09 23:13 1470基于连接表,顾名思义就是需要建立中间表来保存两个表的关联关系。 ... -
Hibernate基于外键的一对多单向关联
2012-08-09 21:42 2031一对多,一个分类Category下有多个Product,从Ca ... -
Hibernate使用注解
2012-08-04 01:37 1079//类标志 @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=...
本篇文章将详细解释如何在C语言环境中使用protobuf-c处理`repeated`字段,创建数组和字符串,并特别关注`pb_callback_t`这一特殊类型。 首先,我们需要理解`repeated`字段在protobuf语义中的含义。在protobuf的定义...
在protobuf中,`repeated`限定修饰符是一个非常重要的概念,用于表示一个字段可以有多个值,类似于数组或列表。本文将深入探讨`repeated`限定修饰符的使用及其相关知识点。 首先,我们需要理解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...
- **《Moyé: Multiple Analyses in Clinical Trials: Fundamentals for Investigators》**:讨论临床试验中多重假设检验的策略和方法,防止I型错误累积。 ### 分子进化统计方法 - **《Nielsen: Statistical ...
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...
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 页数:...