Nhibernate中一对多映射——双向关联

上一篇博客中提到的是单向关联:Nhibernate一对多映射——单向关联。这篇说说双向关联。

双向关联和单向关联的区别是:两边都能维护关系,如我查询两边的任何一边,另外一边的信息也能查询出来,其他的修改删除只要设置了,也都可以。体现在代码中是:因为上篇单向关联是在DictionaryEntity上,所以变为双向关联要在DictionTypeEntity和他对应的xml文件中加上关联映射。

DictionaryEntity修改为:

#region 实体属性
	        /// <summary>
	        /// 类型
	        /// </summary>
	        public virtual string Type { get;set; }
	        /// <summary>
	        /// 类型名称
	        /// </summary>
	        public virtual string TypeName  { get; set; }
	        /// <summary>
	        /// 时间戳
	        /// </summary>
	        public virtual string TimeStamp { get;set; }
	        /// <summary>
	        /// 操作用户
	        /// </summary>
	        public virtual string AddUser{ get; set; }  

			/// <summary>
		        /// 字典实体list集合
		        /// </summary>
		        public virtual IList<DictionaryEntity> DictionaryEntitys { get; set; }

        #endregion 

DictionaryEntity对应的xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
	<class name="Model.Entity.DictionaryTypeEntity, Model" table="T_DictionaryManage">
		<id name="DictionaryType" type="String" unsaved-value="null">
			<column name="DictionaryType" length="20"    unique="true"/>
			<generator class="assigned" />
		</id>
		<property name="TypeName" type="String">
			<column name="TypeName" length="50"   not-null="true"/>
		</property>
		<property name="TimeStamp" type="String">
			<column name="DateTimeStamp" length="20"   not-null="true"/>
		</property>
		<property name="AddUser" type="String">
			<column name="AddUser" length="20"   not-null="false"/>
		</property>
    <!-- 字典实体 -->
    <bag name="DictionaryEntitys" inverse="true" cascade="all">
      <key column="DictionaryType"/>
      <one-to-many class="Model.Entity.DictionaryEntity"/>
    </bag>
	</class>
</hibernate-mapping>

此时,如果我们查询了DictionaryEntity的信息,想知道DictionaryTypeEntity的Value的信息,只要在DictionaryEntity.DictionaryType.Value就能查询出来我们想要的值。如果我们想保存DictionaryEntity的信

息,我们得先实例化一个DictionaryTypeEntity,并赋值给DictionaryEntity.DictionaryType。如下:

DictionaryTypeEntity enDictionaryType=new DictionaryTypeEntity();
DictionaryEntity enDictionary=new DictionaryEntity();
enDictionary.DictionaryType=enDictionaryType;

这样就不会报“未对对象实例化”的错误了。这样是不是简单多了,避免以前的联合查询啥的了。

时间: 2024-12-25 07:43:02

Nhibernate中一对多映射——双向关联的相关文章

使用jackson转json解决双向关联循环调用

ITOO V1.0的开发算是告一段落了,现在是整理总结交接环节,在这个项目中常见的问题也该好好整理一下和大家分享了,这次主要介绍转json循环调用的问题. 一.问题背景 相信只要使用ORM映射实体关联关系,实体中存在双向关联的都遇到过这样的问题: 其实这个问题在上次的.NET项目中遇到过,所以这个问题是一个常见问题,只不过因为这次实在java中第一次遇到,但是循环调用的原理还是没有改变的. 二.解决方案 由于刚java项目的经验不丰富,之前实体关系也没有这次项目中的复杂,所以没有解决过,不过学会

Hibernate一对一双向关联(外键关联)用法小结

这几天在改一个项目源码,遇到一个问题坑了很久.场景如下(注:此处是借鉴网络上的例子,并不是自己的实验环境): 一夫一妻制--比如夫妻关系的两张数据表,一个是wif表,一个是husban表,其数据表信息如下: CREATE TABLE `wife` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFA

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

上篇文章讨论了单向关联的一对多映射,在一的一端维护双向的关系这样的做法尽管能实现可是存在非常多缺陷,首先生成非常多多余的SQL语句,由于多的一端不维护关系,仅仅有一的一端维护,在进行操作时一的一端会发出多余的update语句:其次,由于多的一端不知道一的一端存在,所以在保存多的一端时假设外键为null值,而且在设计数据库时关系字段设为非空,则将无法保存数据.由于单向关联一对多存在非常多缺点那就没有其他的办法了吗,能够採用双向关联来优化. 一.一对多双向关联 这里继续採用上篇文章的学生和班级作为演

Hibernate5-多对一双向关联-fetch=&quot;select&quot;,lazy=&quot;proxy&quot;,在一的一方的class标签中添加

1.创建项目,项目名称hibernatedemo28,目录结构如图所示 2.在项目中创建lib目录存储jar文件,目录结构如图所示 3.在src目录中创建实体类Forum,包名(com.mycompany.demo.bean),如图所示 4.实体类Forum的内容如下 package com.mycompany.demo.bean; import java.util.Set; public class Forum { private int fid; private String name; p

Hibernate 一对多双向关联Demo

以Classes[班级]和Student[学生]为例的Demo //Classes.java public class Classes implements Serializable { private long cid; private String cname; private String cdesc; private Set<Student> students; //get和set } //Student .java public class Student implements Se

Hibernate5-一对多双向关联-左外连接-HQL

1.创建项目,项目名称hibernatedemo18,目录结构如图所示 2.在项目中创建lib目录存储jar文件,目录结构如图所示 3.在src目录中创建实体Bean Forum,包名(com.mycompany.demo.bean),如图所示 4.实体Bean Forum的内容如下 package com.mycompany.demo.bean; import java.util.Set; public class Forum { private int fid; private String

Hibernate5-一对多双向关联-迫切左外连接-HQL

1.创建项目,项目名称hibernatedemo19,目录结构如图所示 2.在项目中创建lib目录存储jar文件,目录结构如图所示 3.在src目录中创建实体Bean Forum,包名(com.mycompany.demo.bean),如图所示 4.实体Bean Forum的内容如下 package com.mycompany.demo.bean; import java.util.Set; public class Forum { private int fid; private String

hibernate一对多双向关联

14.一对多双向关联 1.在多的一方关联一的一方,多的一方直接维护了关系,所以多的一方没有inverse属性,多的一方在保存自己的时候直接保存了外键,效率高. 2.建立关系和保存对象,可以对应两个映射文件,保存多的一方自己对应自己的映射文件,建立关系可以使用一的一方表的inverse属性.这样发出update语句,效率低了.一对多,从多的一方建立关系,效率高. 例子 在student这边保存属性private Classess classess; 在student.hbm.xml文件在<clas

关于SSH 持久对象转Json双向关联解析过度的解决办法

小弟是一名被部分程序员所鄙视的培训狗,昨天做项目遇到一个问题,在SSH框架通过ajax向界面传递数据的时候,由于对象之间双向关联导致json解析过度,造成内存溢出,网上搜索了解决办法除了过滤某些关联对象之外就没有别的办法了,我的想法是通过设置解析深度来解决过度抓取的问题,开始也考虑性能问题,最好的解决办法就是做一个视图,单独写一个model .但是又不希望这样繁琐,后来发现换个观点一想,能解决这个过度解析的问题对系统的性能的提升其实也很大了,所以就自己动手准备写一个转换工具类,办法也很明了递归.