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

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框架中,实体映射文件(通常为`.hbm.xml`)用于定义Java对象与数据库表之间的映射关系。这其中包括了属性到数据库表列的映射、主键生成策略、以及一些高级特性...

    Hibernate继承映射代码

    这些代码可能包括实体类定义、映射文件(如.hbm.xml或使用注解的类)、Hibernate配置文件(hibernate.cfg.xml)以及C3P0的配置部分。通过对这些代码的学习和分析,我们可以更深入地理解如何在实际项目中运用这些技术...

    hibernate关联映射实例

    Hibernate的配置文件(hibernate.cfg.xml)包含了数据库连接信息、缓存设置等。实体的映射通常在单独的XML文件(如.hbm.xml)中定义,或者使用注解方式直接在Java类上声明。XML映射文件中包含了实体的属性、关联和...

    hibernate关联映射的作用和常用属性解释

    ### Hibernate关联映射的作用与常用属性详解 #### 关联映射概述 在对象关系映射(Object Relational Mapping,简称ORM)技术中,Hibernate作为Java领域内非常成熟且功能强大的框架之一,它允许开发者将Java类映射...

    常用 Hibernate 映射配置说明.doc

    ### 常用Hibernate映射配置详解 #### 1. hibernate-mapping节点解析 `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库...

    [原]Hibernate集合映射

    《Hibernate集合映射详解》 Hibernate作为Java领域中的一款强大持久化框架,其核心功能之一就是对象关系映射(ORM),使得开发者可以...在实践中,不断调整和优化映射配置,能够进一步提升应用程序的性能和可维护性。

    Hibernate映射配置实例大全(详细总结)

    综上所述,"Hibernate映射配置实例大全"涵盖的内容广泛,包括基本的配置文件设置、实体类的XML和注解映射、集合映射、加载策略、事务管理和缓存配置等。通过深入学习和实践这些实例,开发者可以熟练地运用Hibernate...

    Hibernate映射配置详解

    本篇文章将深入探讨Hibernate的映射配置,帮助你理解如何在实际项目中有效地使用Hibernate。 一、Hibernate概述 Hibernate的核心功能在于它的持久化层,通过ORM机制将Java对象与数据库表进行绑定。它提供了一种在...

    Hibernate集合映射与关联关系

    对于"student与Score的Map集合关系",在Hibernate配置文件中,我们需要定义两个实体(Student和Score),并在Student实体中声明一个Map类型属性,用于存储Score对象。映射关系可以通过`@OneToMany`和`@ManyToOne`...

    Hibernate映射集合属性List

    -- 其他属性映射 --&gt; ``` 3. **自动创建表:** Hibernate提供了一个非常方便的功能,即可以根据实体类自动创建对应的数据库表。只需在`hibernate.cfg.xml`中设置`hbm2ddl.auto`属性为`create`或`...

    hibernate的映射文件配置

    标题:“Hibernate的映射文件配置” 描述:本文深入解析了Hibernate映射文件配置的核心概念,重点阐述了映射文件的基本结构...通过合理配置主键策略和属性映射,可以显著提高应用程序的数据访问性能和代码的可维护性。

    JAVA数据类型与Hibernate的类型映射

    关于工具的使用,Hibernate提供了hibernate.cfg.xml配置文件或基于Java的配置方式来设置数据库连接参数、实体类扫描路径等。同时,它还提供了SessionFactory、Session、Transaction等接口,供开发者进行数据库操作。...

    hibernate集合的映射

    在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便实现对象关系映射(ORM)。本文将深入探讨Hibernate中的四种主要集合映射类型:Set、List、Array和Map,以及它们在实际...

    Hibernate高级映射实例

    在Hibernate中,映射是将对象模型与关系数据库之间的桥梁,通过XML配置文件或注解,我们可以定义对象与表之间的关系,以便于对象的CRUD(创建、读取、更新、删除)操作对应到数据库的SQL操作。 1. **单向一对一映射...

    hibernate array 数组映射

    本篇将详细探讨`hibernate array 数组映射`的相关知识点,包括其原理、配置、使用场景以及最佳实践。 ### Hibernate概述 Hibernate 是一个开源的Java ORM(Object-Relational Mapping)框架,它通过提供一种对象-...

    Hibernate实体映射

    这种映射通过Hibernate的配置文件(通常是hibernate.cfg.xml)和注解(或.hbm.xml文件)来定义。 二、实体类与注解 在Java类上使用特定的Hibernate注解可以声明实体类及其属性与数据库表的对应关系。例如,`@Entity...

    《Hibernate 各类映射文件与配置文件模板》HibernateMappingConfig.zip

    《Hibernate各类映射文件与配置文件模板》是一个包含多种Hibernate映射和配置示例的压缩包,用于帮助开发者理解和使用Hibernate框架。Hibernate是Java领域的一个流行的对象关系映射(ORM)框架,它允许开发者用面向...

    Hibernate关系映射

    在Hibernate中,我们通过配置XML映射文件或使用注解来实现这种关系。 **二、配置“多对一”关系** 1. **XML映射方式:** 在Hibernate的.hbm.xml映射文件中,我们可以为多的一方添加`&lt;many-to-one&gt;`标签,指定目标...

    hibernate组件映射

    在Hibernate中,组件映射是将一个类的实例作为另一个类的一个属性进行持久化的过程。这种映射方式有助于保持数据模型的整洁和逻辑性,同时也使得数据的管理更为高效。下面我们将详细探讨Hibernate的组件映射。 一、...

Global site tag (gtag.js) - Google Analytics