首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

第九章Hibernate照射一对一关联关系

2012-08-22 
第九章Hibernate映射一对一关联关系第九章Hibernate映射一对一关联关系共享主键关联唯一外键关联?? 1.两个

第九章Hibernate映射一对一关联关系

第九章Hibernate映射一对一关联关系

共享主键关联唯一外键关联

?? 1.两个关联表使用相同的主键值

?

?数据准备:

-- Create tablecreate table USERS1(  USERNAME VARCHAR2(40),  PASSWORD VARCHAR2(40),  ID       NUMBER(8) not null)

?Profile表用于保存用户的其他信息。

-- Create tablecreate table PROFILE(  ID       NUMBER(8) not null,  EMAIL    VARCHAR2(200),  PHONE    VARCHAR2(20),  MOBILE   VARCHAR2(20),  ADDRESS  VARCHAR2(200),  POSTCODE VARCHAR2(10))

?其中,ID即是主键又是外键。因此称为共享主键。

? User:

public class User implements java.io.Serializable {private static final long serialVersionUID = 1L;private Integer id;private String username;private String password;private Profile profile;public Profile getProfile() {return profile;}public void setProfile(Profile profile) {this.profile = profile;}public User() {}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return this.username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return this.password;}public void setPassword(String password) {this.password = password;}}

?User映射配置:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--     Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>    <class name="com.crazy.User" table="USERS1" schema="SCOTT">        <id name="id" type="java.lang.Integer">            <column name="ID" precision="8" scale="0" />            <generator type="java.lang.String">            <column name="USERNAME" length="40" />        </property>        <property name="password" type="java.lang.String">            <column name="PASSWORD" length="40" />        </property>        <one-to-one name="profile" name="code">public class Profile implements java.io.Serializable {private Integer id;private String email;private String phone;private String mobile;private String address;private String postcode;private User user;public Profile() {}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String getEmail() {return this.email;}public void setEmail(String email) {this.email = email;}public String getPhone() {return this.phone;}public void setPhone(String phone) {this.phone = phone;}public String getMobile() {return this.mobile;}public void setMobile(String mobile) {this.mobile = mobile;}public String getAddress() {return this.address;}public void setAddress(String address) {this.address = address;}public String getPostcode() {return this.postcode;}public void setPostcode(String postcode) {this.postcode = postcode;}}

? Profile映射配置:

? 其主键是使用user的。

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--     Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>    <class name="com.crazy.Profile" table="PROFILE" schema="SCOTT">        <id name="id" type="java.lang.Integer">            <column name="ID" precision="8" scale="0" />            <generator type="java.lang.String">            <column name="EMAIL" length="200" />        </property>        <property name="phone" type="java.lang.String">            <column name="PHONE" length="20" />        </property>        <property name="mobile" type="java.lang.String">            <column name="MOBILE" length="20" />        </property>        <property name="address" type="java.lang.String">            <column name="ADDRESS" length="200" />        </property>        <property name="postcode" type="java.lang.String">            <column name="POSTCODE" length="10" />        </property>        <one-to-one name="user" name="code">public class HibernateTest {public static void main(String args[]){HibernateTest test = new HibernateTest();test.add();}public void add(){Profile profile = new Profile();profile.setAddress("河南胜利路");profile.setEmail("yesmeshtu2008@163.com");profile.setMobile("13301239472145");User user = new User();profile.setUser(user);user.setUsername("grass");user.setPassword("123");user.setProfile(profile);Session session = new Configuration().configure().buildSessionFactory().openSession();session.beginTransaction();session.save(profile);session.save(user);session.getTransaction().commit();}}

?? 2.多对一关联的特殊形式,要求多方唯一

?? User类:

public class User  implements java.io.Serializable {     private Integer id;     private String username;     private String password;     private Profile profile;         public Profile getProfile() {return profile;}public void setProfile(Profile profile) {this.profile = profile;}public User() {    }        public Integer getId() {        return this.id;    }        public void setId(Integer id) {        this.id = id;    }    public String getUsername() {        return this.username;    }        public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return this.password;    }        public void setPassword(String password) {        this.password = password;    }}

?? User映射配置:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--     Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>    <class name="com.crazy.User" table="USERS1" schema="SCOTT">        <id name="id" type="java.lang.Integer">            <column name="ID" precision="8" scale="0" />            <generator />        </id>        <property name="username" type="java.lang.String">            <column name="USERNAME" length="40" />        </property>        <property name="password" type="java.lang.String">            <column name="PASSWORD" length="40" />        </property>        <one-to-one name="profile" name="code">public class Profile  implements java.io.Serializable {     private Integer id;     private String email;     private String phone;     private String mobile;     private String address;     private String postcode;     private User user;    public User getUser() {return user;}public void setUser(User user) {this.user = user;}public Profile() {    }    public Integer getId() {        return this.id;    }        public void setId(Integer id) {        this.id = id;    }    public String getEmail() {        return this.email;    }        public void setEmail(String email) {        this.email = email;    }    public String getPhone() {        return this.phone;    }        public void setPhone(String phone) {        this.phone = phone;    }    public String getMobile() {        return this.mobile;    }        public void setMobile(String mobile) {        this.mobile = mobile;    }    public String getAddress() {        return this.address;    }        public void setAddress(String address) {        this.address = address;    }    public String getPostcode() {        return this.postcode;    }        public void setPostcode(String postcode) {        this.postcode = postcode;    }}

?? Profile映射配置:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--     Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>    <class name="com.crazy.Profile" table="PROFILE1" schema="SCOTT">        <id name="id" type="java.lang.Integer">            <column name="ID" precision="8" scale="0" />            <generator />        </id>        <property name="email" type="java.lang.String">            <column name="EMAIL" length="200" />        </property>        <property name="phone" type="java.lang.String">            <column name="PHONE" length="20" />        </property>        <property name="mobile" type="java.lang.String">            <column name="MOBILE" length="20" />        </property>        <property name="address" type="java.lang.String">            <column name="ADDRESS" length="200" />        </property>        <property name="postcode" type="java.lang.String">            <column name="POSTCODE" length="10" />        </property>        <many-to-one name="user" unique="true">        <column name="user_id"></column>        </many-to-one>    </class></hibernate-mapping>

?? 配置如下:

  <many-to-one name="user" unique="true">        <column name="user_id"></column>        </many-to-one>

? 测试代码:

public class HibernateTest {public static void main(String args[]){HibernateTest test = new HibernateTest();test.add();}public void add(){Profile profile = new Profile();profile.setAddress("河南胜利路");profile.setEmail("yesmeshtu2008@163.com");profile.setMobile("13309472145");User user = new User();profile.setUser(user);user.setUsername("grass");user.setPassword("123");user.setProfile(profile);Session session = new Configuration().configure().buildSessionFactory().openSession();session.beginTransaction();session.save(profile);session.save(user);session.getTransaction().commit();}}
?

热点排行