zoukankan      html  css  js  c++  java
  • Hibernate读书笔记Hibernate的关联映射之组件属性关联关系

              先看User持久化类:

    public class Users {
    	private int id;
    	private Date birthday;
    	private Name name;
    
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public Date getBirthday() {
    		return birthday;
    	}
    
    	public void setBirthday(Date birhday) {
    		this.birthday = birhday;
    	}
    
    	public Name getName() {
    		return name;
    	}
    
    	public void setName(Name name) {
    		this.name = name;
    	}
    
    }
    


              User持久化类中可以看到name不再是一个简单的String,而是一个类。在这里name就是一个组件属性,在name类中可以包含基本数据类型、字符型、日期型甚至是组件和关联实体。从User持久化类中我们看不出name是关联实体还是普通的组件属性。但是如果我们将Name映射成持久化实体,那么Name就是关联实体,如果不映射成持久化类,那么就是组件属性。这里我们不将Name映射成持久化类。

              Name类如下:

    public class Name {
    	private String firstName;
    	private String lastName;
    
    	public String getFirstName() {
    		return firstName;
    	}
    
    	public void setFirstName(String firstName) {
    		this.firstName = firstName;
    	}
    
    	public String getLastName() {
    		return lastName;
    	}
    
    	public void setLastName(String lastName) {
    		this.lastName = lastName;
    	}
    
    }
    

            为了映射User类中的Name组件,映射文件中使用<component.../>元素来映射该主键元素。映射文件如下:

              User.hbm.xml

    <hibernate-mapping package="com.hibernate.domain">
    	<class name="Users">
    		<id name="id">
    			<generator class="native" />
    		</id>
    
    		<property name="birthday" />
    		
    		<!-- 映射组件元素 -->
    		<component name="name">
    			<!-- 映射组件的name属性指向包含实体 -->
    			<property name="firstName" column="first_name"/>
    			<property name="lastName" column="last_name"/>
    		</component>
    	</class>
    </hibernate-mapping>


              操作类如下:

    public class UserManager {
    
    	public static void main(String[] args) {
    		Session session = HibernateUtil.getSession();
    		Transaction tx = session.beginTransaction();
    		
    		Users users = new Users();
    		users.setBirthday(new Date());
    		Name name = new Name();
    		
    		name.setFirstName("first name");
    		name.setLastName("last name");
    		users.setName(name);
    		
    		session.save(users);
    		tx.commit();
    		session.close();
    	}
    
    }

     

    读李刚《轻量级Java EE 企业应用实战》

  • 相关阅读:
    centos 7 安装VCL播放器
    pheatmap, gplots heatmap.2和ggplot2 geom_tile实现数据聚类和热图plot
    R语言通过loess去除某个变量对数据的影响
    安卓手机免root实现对其他软件最高管理(sandbox思想)
    R语言写2048游戏
    R语言各种假设检验实例整理(常用)
    R语言实现对基因组SNV进行注释
    R语言实现二分查找法
    将基因组数据分类并写出文件,python,awk,R data.table速度PK
    PHP设计模式练习——制作简单的投诉页面
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3752336.html
Copyright © 2011-2022 走看看