Hibernate學習_011_組件映射

組件映射,反映在編程模型中對應的是兩個類,但是在數據庫中一般對應一張表。比如我們有兩個類Husband和Wife,但是我們如果將Wife作爲Husband的一個組件,那麼雖然在程序中對應的是兩個類,但是數據庫中只對應一個Husband表。

代碼如下所示:

1:Annotation方式:

Wife.java:(由於wife現在是作爲Husband的組件出現在Husband中,所以wife不應再有id主鍵!!)

public class Wife {
	private String wifename;
	private int age;
	
	public String getWifename() {
		return wifename;
	}
	public void setWifename(String wifename) {
		this.wifename = wifename;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
Husband.java:

@Entity
public class Husband {
	private int id;
	private String name;
	private Wife wife;
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	@Embedded
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
Husband中我們使用了@Embedded來標識wife是作爲一個組件嵌入到husband中的。測試生成的建表語句如下:

09:54:03,797 DEBUG SchemaExport:377 - 
    create table Husband (
        id integer not null auto_increment,
        name varchar(255),
        age integer not null,
        wifename varchar(255),
        primary key (id)
    )
09:54:03,886  INFO SchemaExport:268 - schema export complete

2:XML方式:

此種方式,只有Husband一個XML文件,而且運行結果完全相同,代碼如下:

<hibernate-mapping package="com.zxb.model">
   <class name="Husband" table="husband">
        <id name="id" column="id">
        	<generator class="native">
        	</generator>
        </id>
        <property name="name" column="name" /> 
        <component name="wife">
        	<property name="wifename"></property>
        	<property name="age"></property>
        </component>
   </class>
</hibernate-mapping>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章