hibernate组件映射

来源:互联网 发布:手机淘宝自定义链接 编辑:程序博客网 时间:2024/05/17 01:01

1        对象关系:一个对象是另外一个对象的一部分

2        数据库表:一张表

3        annotation: @ Embeddable @Embbeded

       对象模型

Husband(id,name,wife)

Wife(name,age)

 

Annotation:

Husbandwife属性上建立注解

@Embedded表明该对象是从别的位置嵌入过来的,是不需要单独映射的表.

这种方式生成的表为husband(id,name,wifename,wifeage),不会生成wife.

 

@Embedded

Public WiftgetWife(){

}

@AttributeOverride注解需要写在getWife方法上,可以重新指定生成的Wife类组件生成的字段名,例如:Husband与Wife两个类中都有name字段,这样在生成表的时候会有冲突,此时采用@AttributeOverride注解可以指定Wife类中的name属性对应新的字段名—“wifename”,不过@AttributeOverride注解不常用,

因为有更好的解决方法

1:不要在组件的两个映射类中写同名属性;

2:如果真的有重复,那么可以在分类中(此处为Wife类)的重复名称的属性上使用如下内容以指定新的字段名:

@Column(name="wifename")

         public String getName() {

                   return name;

          }

 

另外,@ Embeddable注解好像是写在分类(Wife类)的类名前的,不过好像不写也行

@Embeddable

publicclass Wife {… …}

4        xml:使用<component,例如:

    

<class name="Husband" >

         <idname="id">

                  <generatorclass="native"/>               

</id>

         <propertyname="name"></property>

         <componentname="wife">

                  <propertyname="wifeName"/>                          

<propertyname="wifeAge"/>

         </component>

</class>

例子:

create table Husband(

id integer not null auto_increment,

name varchar(255),

age integer not null,

wiftName varchar(255),

primary key (id)

)


package com.bjsxt.hibernate;


import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.OneToOne;


@Entity
public class Husband {
private int id;
private String name;
private Wife wife;
@Id
@GeneratedValue
public int getId() {
return id;
}

public String getName() {
return name;
}
@Embedded
public Wife getWife() {
return wife;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(Wife wife) {
this.wife = wife;
}

}


package com.bjsxt.hibernate;






public class Wife {

private String wifeName;
private int age;

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

public String getWifeName() {
return wifeName;
}
public void setWifeName(String name) {
this.wifeName = name;
}

}


--xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


<hibernate-mapping>
<class name="com.bjsxt.hibernate.Husband" >
<id name="id">
<generator class="native"></generator>
</id>

<property name="name"></property>
<component name="wife">
<property name="wifeName"></property>
<property name="age"></property>
</component>
    </class>

</hibernate-mapping>


hibernate.cfg.xml

<mapping resource="com/bjsxt/hibernate/Husband.hbm.xml"/>


0 0
原创粉丝点击