组件映射
Husband 中 有一个 Wife 属性,数据库不生成Wife表,仅将Wife的所有字段都加到Husband表中。
Annotation 配置:
如果 Husband 类的属性比如 husband 的 name 属性和 wife 的name属性冲突,有两种解决方案:
1、将 wife的name属性改为 wifeName;
2、通过 @AttributeOverrides 自己一个一个对wife的属性进行设置就可以了,如下:
@Embedded @AttributeOverrides(value = { @AttributeOverride(name="wifeName", column=@Column(name="wifName2")),//别名 @AttributeOverride(name="age", column=@Column(name="wifeAge")) }) public Wife getWife() { return wife; }
Husband 类:
1 package com.bjsxt.hibernate; 2 3 import javax.persistence.Embedded; 4 import javax.persistence.Entity; 5 import javax.persistence.GeneratedValue; 6 import javax.persistence.Id; 7 8 @Entity 9 public class Husband { 10 11 private Integer id; 12 13 private String name; 14 15 private Wife wife; 16 17 @Id 18 @GeneratedValue 19 public Integer getId() { 20 return id; 21 } 22 23 public String getName() { 24 return name; 25 } 26 27 @Embedded 28 public Wife getWife() { 29 return wife; 30 } 31 32 public void setId(Integer id) { 33 this.id = id; 34 } 35 36 public void setName(String name) { 37 this.name = name; 38 } 39 40 public void setWife(Wife wife) { 41 this.wife = wife; 42 } 43 }
Wife 类:
1 package com.bjsxt.hibernate; 2 3 public class Wife { 4 5 private String wifeName; 6 7 private int age; 8 9 public String getWifeName() { 10 return wifeName; 11 } 12 13 public void setWifeName(String wifeName) { 14 this.wifeName = wifeName; 15 } 16 17 public int getAge() { 18 return age; 19 } 20 21 public void setAge(int age) { 22 this.age = age; 23 } 24 }
生成的SQL语句
XML 配置:
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping package="com.bjsxt.hibernate"> 7 <class name="Husband" table="husband"> 8 <id name="id" column="id"> 9 <generator class="native"/> 10 </id> 11 12 <property name="name" column="name" /> 13 14 <component name="wife"> 15 <property name="wifeName" column="wifeName" /> 16 <property name="age" column="wifeAge" /> 17 </component> 18 </class> 19 </hibernate-mapping>
生成的SQL语句:
jar包链接: https://pan.baidu.com/s/1kUARge7 密码: nsyb
代码链接: https://pan.baidu.com/s/1o7QZZOA 密码: stbv