Hibernate读书笔记-----Hibernate的关联映射之组件属性关联关系
先看User持久化类:
1 public class Users { 2 private int id; 3 private Date birthday; 4 private Name name; 5 6 public int getId() { 7 return id; 8 } 9 10 public void setId(int id) { 11 this.id = id; 12 } 13 14 public Date getBirthday() { 15 return birthday; 16 } 17 18 public void setBirthday(Date birhday) { 19 this.birthday = birhday; 20 } 21 22 public Name getName() { 23 return name; 24 } 25 26 public void setName(Name name) { 27 this.name = name; 28 } 29 30 }
从User持久化类中可以看到name不再是一个简单的String,而是一个类。在这里name就是一个组件属性,在name类中可以包含基本数据类型、字符型、日期型甚至是组件和关联实体。从User持久化类中我们看不出name是关联实体还是普通的组件属性。但是如果我们将Name映射成持久化实体,那么Name就是关联实体,如果不映射成持久化类,那么就是组件属性。这里我们不将Name映射成持久化类。
Name类如下:
1 public class Name { 2 private String firstName; 3 private String lastName; 4 5 public String getFirstName() { 6 return firstName; 7 } 8 9 public void setFirstName(String firstName) { 10 this.firstName = firstName; 11 } 12 13 public String getLastName() { 14 return lastName; 15 } 16 17 public void setLastName(String lastName) { 18 this.lastName = lastName; 19 } 20 21 }
为了映射User类中的Name组件,映射文件中使用<component.../>元素来映射该主键元素。映射文件如下:
User.hbm.xml
1 <hibernate-mapping package="com.hibernate.domain"> 2 <class name="Users"> 3 <id name="id"> 4 <generator class="native" /> 5 </id> 6 7 <property name="birthday" /> 8 9 <!-- 映射组件元素 --> 10 <component name="name"> 11 <!-- 映射组件的name属性指向包含实体 --> 12 <property name="firstName" column="first_name"/> 13 <property name="lastName" column="last_name"/> 14 </component> 15 </class> 16 </hibernate-mapping>
操作类如下:
1 public class UserManager { 2 3 public static void main(String[] args) { 4 Session session = HibernateUtil.getSession(); 5 Transaction tx = session.beginTransaction(); 6 7 Users users = new Users(); 8 users.setBirthday(new Date()); 9 Name name = new Name(); 10 11 name.setFirstName("first name"); 12 name.setLastName("last name"); 13 users.setName(name); 14 15 session.save(users); 16 tx.commit(); 17 session.close(); 18 } 19 20 }
-
作者:chenssy。一个专注于【死磕 Java】系列创作的男人
出处:https://www.cnblogs.com/chenssy/archive/2012/07/17/2594879.html
作者个人网站:https://www.cmsblogs.com/。专注于 Java 优质系列文章分享,提供一站式 Java 学习资料
目前死磕系列包括:
1. 【死磕 Java 并发】:https://www.cmsblogs.com/category/1391296887813967872(已完成)
2.【死磕 Spring 之 IOC】:https://www.cmsblogs.com/category/1391374860344758272(已完成)
3.【死磕 Redis】:https://www.cmsblogs.com/category/1391389927996002304(已完成)
4.【死磕 Java 基础】:https://www.cmsblogs.com/category/1411518540095295488
5.【死磕 NIO】:https://www.cmsblogs.com/article/1435620402348036096
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。