`
Luob.
  • 浏览: 1573804 次
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate的属性映射配置

阅读更多
package com.crazyit.app.domain;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

public class Student {
	//多列 联合组件
	private String first;
	private String last;
	
	//复合 组件
	private Name names;  //如果主键 为 复合组件  Name 一定要 实现 Serializable 且重写 equals() 和 hashCode()
	
	private Integer id;  //主键 
	private String name;
	private int age;
	
	private List<String> schools=new ArrayList<String>();
	private String[] schools1;
	
	private Set<String> schools2=new HashSet<String>();
	
	private Collection<String> school3=new ArrayList<String>();
	
	private Map<String,Float> scroes=new HashMap<String,Float>();
	
	private SortedSet<String> trainings=new TreeSet<String>();
	
	
	private Map<String,Name> nicks=new HashMap<String,Name>();
	
	//如果 Map 的key 为复合组件 ,要重写 equals() 和 hashCode()
	private Map<Name,Integer> nicksPower=new HashMap<Name,Integer>();
	//get set
	
}

package com.crazyit.app.domain;

public class News {
	private Integer id;
	private String title;
	private String content;
	private String fullContent;
//get set
}


public class Name implements Serializable{

	private String first;
	private String last;
	private Student stu;
	private Map<String,Integer> power=new HashMap<String,Integer>();
	//get set


        @Override
	public int hashCode() {}
        @Override
	public boolean equals(Object obj)
}


主键映射


<id name="id" type="java.lang.Integer">
			<column name="ID" />
			<generator class="assigned" />
</id>

<id name="id" type="java.lang.Integer" column="ID">
			<generator class="assigned" />
</id>

<!-- 如果组件为上面的  主键  复合组件names  不是ID 就像下面配置 -->
<composite-id name="names" class="Name">
			<key-property name="first" type="string"/>
			<key-property name="last" type="string"/>
		</composite-id>

<!-- 如果 主键 为多列联合组件 -->
		<composite-id>
			<key-property name="first" type="string"/>
			<key-property name="last" type="string"/>
		</composite-id>


普通属性映射
<property name="name" type="java.lang.String" colunm="NAME">
</property>
<property name="age" type="int">
			<column name="AGE" />
</property>



根据sql表达式给属性赋值
<!--表中没有这一列,通过sql来给值-->
 <property name="fullContent" formula="(select concat(title,content) from news nt where nt.id=id)"/>
         
         <!-- 如果表中有这一列,而这一列是在插入的时候 通过一个触发器来自动生成一个值-->
        <property name="fullContent" column="full_content" type="string" generated="insert"/>        



映射集合属性
 <!-- 映射 list -->
		<list name="schools" table="SCHOOL">
			<key column="personid" not-null="true" />
			<list-index column="list_order" />
			<element type="string" column="school_name" />
		</list>

<!--数组的映射 element 元素必须放在下面 注意有顺序 -->
		<array name="schools1" table="SCHOOL">
			<key column="person_id" not-null="true" />
			<list-index column="list_order" />
			<element type="string" column="school_name" />
		</array>

<!-- set集合的映射 -->
		<set name="school2" table="SCHOOL">
			<key column="person_id" not-null="true" />
			<element type="string" column="school_name" not-null="true" />
		</set> 

<!-- collection set arrayList bag始终是无序的 -->
		<bag name="school3" table="SCHOOL">
			<key column="person_id" not-null="true" />
			<element type="string" column="school_name" not-null="true" />
		</bag>

<!-- map的映射 -->
		<map name="scores" table="SCHOOL" lazy="true">
			<key column="person_id" not-null="true" />
			<map-key type="string" column="subject" />
			<element column="grade" type="float" />
		</map>

<!-- 带排序功能的sortedSet -->
		<set name="tranings" table="TRAININGS" sort="natural" order-by="training_name desc">
			<key column="person_id" not-null="true" />
			<element type="string" column="training_name" not-null="true" />
		</set>



映射数据库对象(注意放的位置,不要放在class标签里面去了)

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2013-12-2 22:01:23 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<!-- 显示的声明 触发器  或 存储过程 函数 DDL语言 等  -->
	<database-object>
		<create>create trigger t_full_content_gen ....</create>
		<drop>create trigger t_full_content_gen...</drop>
		<!-- 定义触发器 或者 存储过程  函数 只使用的 数据库方言 -->
		<dialect-scope name="org.hibernate.dialect.MySqlDialect"/>
		<dialect-scope name="org.hibernate.dialect.MySqlInnoDBDialect"/>
	</database-object>
	<!-- 创建表-->
	<database-object>
		<create>create table test(t_name varchar(255));</create>
		<drop></drop>
		<dialect-scope name="org.hibernate.dialect.MySqlDialect"/>
		<dialect-scope name="org.hibernate.dialect.MySqlInnoDBDialect"/>
	</database-object>
</hibernate-mapping>



使用SchemaExport 工具.单独根据映射文件生成数据库对象
@Test
	public void test6(){   //如果这是想用 hibernate 根据 映射文件来生成 数据对象 ,比如 表  ,存储过程,触发器, 函数 等 ..
		//SchemaExport 提供了一个  main方法,可以使用 java命令还执行, 
		//java -cp hiberante_classpaths org.hibernate.tool.hbm2ddl.SchemaExport opetions mapping_files
		Configuration con=new Configuration().configure();
		SchemaExport se=new SchemaExport(con);
		se.setFormat(true)
		.setOutputFile("c:\\new.sql")
		.create(true, true);
	}


映射组件属性(即,包含的属性不是数据库中持久化对象,没有table)
<!-- 映射组件属性 以及 组件属性中含有 集合 -->
		<component name="names" class="Name" unique="true">
			<parent name="stu"/>
			<property name="first" type="string"/>
			<property name="last" type="string"/>
			<map name="power" table="name_power">
				<key column="person_name_id" not-null="true"/>
				<map-key type="string" column="name_aspect"/>
				<element column="name_power" type="int"/>
			</map>
		</component>

<!-- 集合中含有  组件属性 -->
		<map name="nicks" table="nick_inf">
			<key column="person_id" not-null="true"/>
			<map-key type="string" column="phase"/>
			<composite-element class="Name">
				<parent name="stu"/>
				<property name="first"/>
				<property name="last"/>
			</composite-element>
		</map>

<!-- 组件属性 作为 Map的key -->
		<map name="nicksPower" table="nick_power">
			<key column="person_id" not-null="true"/>
			<composite-map-key class="Name">
				<key-property name="first" type="string"/>
				<key-property name="last" type="string"/>
			</composite-map-key>
			<element column="nick_power" type="int"/>
		</map> 

2
1
分享到:
评论

相关推荐

    Hibernate映射配置详解

    Hibernate映射配置详解

    hibernate映射文件配置分析及要点

    hibernate 映射文件 配置分析及要点,你还在为配置hibernate 映射文件而发愁吗?这里总结了它的常用元素及属性。session,SessionFactory的应用

    Hibernate映射配置入门进阶详解

    1)根元素映射&lt;hibernate-mapping/&gt; 2)类映射 3)属性映射 4)主键的配置 5)主键生成策略 复合主键策略 史上最详细

    Hibernate中单一映射笔记

    Hibernate开发过程(单一映射体) 1创建持久类XXXX.java(要有oid字段:唯一且不具有业务含义;所有属性都有getter/setter方法;空的构造方法;不含oid的构造方法) 2创建映射文件XXXX.hbm.xml(包,类,id,字段) 3...

    Hibernate注解 关联关系映射注解.docx

    mappedBy属性用法: ...也正因为放弃了维护权,与DB无关了,所以设置了mappedBy属性的注解,再设置cascade也就无意义了。 一个是使被注解者与DB相关,一个是使被注解者放弃与DB的关系,它们是相互矛盾的。

    javaee实验五 大学本科生 hibernate

    (一)实验目的 1、 掌握 Hibernate 开发环境搭建的基本步骤; 2、 观察持久化类与数据库表的映射关系,观察相应的 ...3、 观察 Hibernate 配置文件(hibernate.cfg.xml)中的主要元素及属性配置,并能够做简单应用。

    Hibernate_Annotation关联映射

    对于一对多的双向映射,如果要一对多这一端维护关联关系,你需要删除mappedBy元素并将多对一这端的@JoinColoumn的insertable和updatabel设置为false。这种方案不会得到什么明显的优化,而且还会增加一些附加的UPDATE...

    hibernate-源代码-01

    Hibernate的配置文件,包含了连接持久层与映射文件所需的基本信息,其配置文件有两种格式,具 体如下: ● 一种是properties 属性文件格式的配置文件,它使用键值对的形式存放信息,默认文件名称 为 hibernate....

    深入浅出Hibernate中文版 part1

    7.4 属性/字段映射配置 第8章 Hibernate工具 8.1 准备工作 8.2 根据数据库定义生成映射文件——MiddleGen 8.3 Hibernate官方工具 8.4 XDoclet-同步Hibernate基础代码 8.5 工具的使用周期 第9章 Hibernate ...

    精通Hibernate之映射继承关系(六)

    图14-11ClassD与ClassA为多对一多态关联关系ClassA、ClassB和ClassC构成了一棵继承关系树,如果继承关系树的根类对应一个表,或者每个类对应一个表,那么可以按以下方式映射ClassD的a属性:&lt;many-to-onename="a...

    Hibernate Annotations 中文文档

    声明基本的属性映射 2.2.2.2. 声明列属性 2.2.2.3. 嵌入式对象(又名组件) 2.2.2.4. 无注解之属性的默认值 2.2.. 映射主键属性 2.2.4. 映射继承关系 2.2.4.1. 每个类一张表 2.2.4.2. 每个类层次结构一张表 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     2.4.3 Hibernate映射类型接口  2.4.4 可供扩展的接口  2.5 小结  2.6 思考题 第3章 第一个Hibernate应用  3.1 创建Hibernate的配置文件  3.2 创建持久化类  3.3 创建数据库Schema  3.4 创建对象-关系映射...

    hibernate annotation 中文文档

    声明基本的属性映射 2.2.2.2. 声明列属性 2.2.2.3. 嵌入式对象(又名组件) 2.2.2.4. 无注解之属性的默认值 2.2.. 映射主键属性 2.2.4. 映射继承关系 2.2.4.1. 每个类一张表 2.2.4.2. 每个类层次结构一张表 2.2.4.3. ...

    Hibernate+中文文档

    3.3. Hibernate配置属性 3.4. Hibernate JDBC和连接(connection)属性 3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 ...

    Hibernate笔记 马士兵

    第9课 Hibernate的重点学习:Hibernate的对象关系映射 12 一、对象---关系映射模式 12 二、常用的O/R映射框架: 13 第10课 模拟Hibernate原理(OR模拟) 13 一、 项目名称 13 二、 原代码 13 第11课 Hibernate基础配置...

    hibernate_集合映射_set方法

    2,建立表的hibernate支持,生成tb_user类和对应的配置文件 3,修改配置文件使之和相应的类对应, 4,修改tb_user类,创建一个set类型的字段emailes,生成它的set和get方法 5,写测试类,对以上内容进行测试。 二、...

    深入浅出Hibernate中文版 part2

    7.4 属性/字段映射配置 第8章 Hibernate工具 8.1 准备工作 8.2 根据数据库定义生成映射文件——MiddleGen 8.3 Hibernate官方工具 8.4 XDoclet-同步Hibernate基础代码 8.5 工具的使用周期 第9章 Hibernate ...

    hibernate 体系结构与配置 参考文档(html)

    Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5...

    Hibernate框架介绍以及入门 【二】Hibernate的常见配置

    Hibernate框架介绍以及入门 【二】 ...二、关于hibernate映射的配置 映射 1、【class标签的配置】 这个标签是来建立类与表(数据库)的映射关系 属性: name:类的一个全路径 table: 表名(类名如果和表名一致那么table可

    hibernate3.2中文文档(chm格式)

    3.3. Hibernate配置属性 3.4. Hibernate JDBC和连接(connection)属性 3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 ...

Global site tag (gtag.js) - Google Analytics