Hibernate一一映射

来源:互联网 发布:知乎赚钱 编辑:程序博客网 时间:2024/04/30 07:48

最近在使用hibernate时,需要用到一一映射的关系,因此整理出两种不同的关联形式,记载下来以便自己记忆和其他朋友参考:

1)主键双向关联:

Person实体:

public class Person implements java.io.Serializable {// Fields/** *  */private static final long serialVersionUID = 1L;private Integer id;private String name;private Location location;// Constructors/** default constructor */public Person() {}/** full constructor */public Person(String name) {this.name = name;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Location getLocation() {return location;}public void setLocation(Location location) {this.location = location;}}


Person.hbm.xml
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.entity.Person" table="Person" >        <id name="id" type="java.lang.Integer">            <column name="id" />            <generator class="native" />        </id>        <one-to-one name="location"></one-to-one>        <property name="name" type="java.lang.String">            <column name="name" length="50" not-null="true" />        </property>    </class></hibernate-mapping>

Location实体:

public class Location implements java.io.Serializable {// Fields/** *  */private static final long serialVersionUID = 1L;private Integer id;private String address;private Person person;// Constructors/** default constructor */public Location() {}/** full constructor */public Location(String address) {this.address = address;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getAddress() {return this.address;}public void setAddress(String address) {this.address = address;}public Person getPerson() {return person;}public void setPerson(Person person) {this.person = person;}}

Location.hbm.xml:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.entity.Location" table="Location" >        <id name="id" type="java.lang.Integer">            <column name="id" />            <generator class="foreign" >            <param name="property">person</param>            </generator>        </id>        <one-to-one name="person" constrained="true"></one-to-one>        <property name="address" type="java.lang.String">            <column name="address" length="50" not-null="true" />        </property>    </class></hibernate-mapping>


测试代码:

public class PrimaryKeyOne2One {Session session;@Beforepublic void prepare(){session=HibernateSessionFactory.getSession();}@Testpublic void insert(){Transaction transaction = null;try {transaction=session.beginTransaction();Person person = new Person();person.setName("帕蒂唐");Location location = new Location();location.setAddress("广东省");location.setPerson(person);//session.save(person);session.save(location);transaction.commit();} catch (HibernateException e) {// TODO: handle exceptionif(transaction!=null)transaction.rollback();}}@Testpublic void proceed(){Person person=(Person)session.get(Person.class, 2);System.out.println(person.getLocation().getAddress());}@Afterpublic void exit(){HibernateSessionFactory.closeSession();}}



2)外键关联



User实体:

public class User implements java.io.Serializable {// Fields/** *  */private static final long serialVersionUID = 1L;private Integer id;private String name;private Account account;public User(){}public User(Integer id){this.id = id;}public User(String name,Account account){this.name=name;this.account=account;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Account getAccount() {return account;}public void setAccount(Account account) {this.account = account;}}

User.hbm.xml:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.entity.User" table="t_user" >        <id name="id" type="java.lang.Integer">            <column name="id" />            <generator class="native" />        </id>        <property name="name" type="java.lang.String">            <column name="name" length="50" not-null="true" />        </property>       <many-to-one name="account" class="com.entity.Account" unique="true" cascade="all" column="account"></many-to-one>    </class></hibernate-mapping>


Account实体:

public class Account implements java.io.Serializable {// Fields/** *  */private static final long serialVersionUID = 1L;private Integer id;private Integer money;// Constructors/** default constructor */public Account() {}/** full constructor */public Account(Integer money) {this.money = money;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public Integer getMoney() {return this.money;}public void setMoney(Integer money) {this.money = money;}}

Account.hbm.xml

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.entity.Account" table="Account" >        <id name="id" type="java.lang.Integer">            <column name="id" />            <generator class="native" />        </id>        <property name="money" type="java.lang.Integer">            <column name="money" not-null="true" />        </property>      <!-- <one-to-one name="user" class="com.entity.User" cascade="all" constrained="true"></one-to-one>  -->     </class></hibernate-mapping>

测试代码:

public class One2OneRelationTest {Session session;@Beforepublic void prepare(){session=HibernateSessionFactory.getSession();}@Testpublic void insert(){Transaction transaction = null;try {transaction=session.beginTransaction();Account account = new Account();account.setMoney(10000);User usr = new User();usr.setName("paditang");usr.setAccount(account);session.save(usr);transaction.commit();} catch (HibernateException e) {// TODO: handle exceptionif(transaction!=null)transaction.rollback();}}/*@Testpublic void Select(){User user = (User)session.get(User.class, 3);String name = user.getName();System.out.println(name);Account account = user.getAccount();System.out.println(account.getMoney());}*//*@Testpublic void delete(){Transaction transaction = null;try {transaction=session.beginTransaction();session.delete(new User(1));transaction.commit();} catch (HibernateException e) {// TODO: handle exceptionif(transaction!=null)transaction.rollback();}}*/@Afterpublic void exit(){HibernateSessionFactory.closeSession();}}

3)外键双向关联

只需要注意在主键那一方,在<one-to-one >下 设置property-ref属性。


0 0
原创粉丝点击