花迹、忆红颜
过去往往总是过不去 留成现在最痛的印记

1.基于(foreign key)外键实现

国家<-------->首都

Country.java

 

 1 package hibernate.orm.one2one.fk;
 2 
 3 import javax.persistence.Column;
 4 import javax.persistence.Entity;
 5 import javax.persistence.GeneratedValue;
 6 import javax.persistence.Id;
 7 import javax.persistence.JoinColumn;
 8 import javax.persistence.OneToOne;
 9 import javax.persistence.PrimaryKeyJoinColumn;
10 import javax.persistence.Table;
11 
12 import org.hibernate.annotations.GenericGenerator;
13 // 主表
14 // 被拥有方
15 @Entity
16 @Table(name = "t_country")
17 public class Country {
18     private Long id;
19     private String name;
20     private Capital capital;
21 
22     public Country() {
23     }
24 
25     @Id
26     @Column(length=8)
27     @GenericGenerator(name = "ud", strategy = "increment")
28     // 主键生成器
29     @GeneratedValue(generator = "ud")
30     public Long getId() {
31         return id;
32     }
33 
34     public void setId(Long id) {
35         this.id = id;
36     }
37 
38     @Column(length = 20)
39     public String getName() {
40         return name;
41     }
42 
43     public void setName(String name) {
44         this.name = name;
45     }
46     @OneToOne(mappedBy="country",optional=true)//一个国家可以没有首都
47     //表示当前所在表和Capital的关系是定义在Capital里面的country这个成员上面的,它表示此表是一对一关系中的主表
48     public Capital getCapital() {
49         return capital;
50     }
51 
52     public void setCapital(Capital capital) {
53         this.capital = capital;
54     }
55 
56 }

 Capital.java

 1 package hibernate.orm.one2one.fk;
 2 
 3 import javax.persistence.Column;
 4 import javax.persistence.Entity;
 5 import javax.persistence.GeneratedValue;
 6 import javax.persistence.GenerationType;
 7 import javax.persistence.Id;
 8 import javax.persistence.JoinColumn;
 9 import javax.persistence.OneToOne;
10 import javax.persistence.PrimaryKeyJoinColumn;
11 import javax.persistence.Table;
12 
13 import org.hibernate.annotations.GenericGenerator;
14 //从表
15 //拥有方
16 @Entity
17 @Table(name = "t_capital")
18 public class Capital {
19     private Long id;
20     private String name;
21     private Country country;
22 
23     public Capital() {
24     }
25 
26     @Id
27     @Column(length=8)
28     @GenericGenerator(name="ud",strategy="increment")
29     @GeneratedValue(generator="ud")
30     public Long getId() {
31         return id;
32     }
33 
34     public void setId(Long id) {
35         this.id = id;
36     }
37     @Column(length=20)
38     public String getName() {
39         return name;
40     }
41 
42     public void setName(String name) {
43         this.name = name;
44     }
45     @OneToOne(optional=false)//一个首都必对应一个国家
46     @JoinColumn(name="country_id")
47     public Country getCountry() {
48         return country;
49     }
50 
51     public void setCountry(Country country) {
52         this.country = country;
53     }
54     
55 }

One2OneTest.java(测试类)

package hibernate.orm.one2one.fk;

import hibernate.util.HibernateSessionFactory;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class One2OneTest {
    public static void main(String[] args) {
        Session session = HibernateSessionFactory.getSession();
        Transaction tx = session.beginTransaction();
        Country country = new Country();
        country.setName("中国");
        Capital capital = new Capital();
        capital.setName("北京");
        country.setCapital(capital);
        capital.setCountry(country);//相互建立关联
        session.save(country);
        session.save(capital);
        tx.commit();
        HibernateSessionFactory.closeSession();
    }
}

hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="dialect">
            org.hibernate.dialect.Oracle10gDialect
        </property>
        <property name="connection.url">
            jdbc:oracle:thin:@127.0.0.1:1521:xe
        </property>
        <property name="connection.username">hibernate</property>
        <property name="connection.password">123</property>
        <property name="connection.driver_class">
            oracle.jdbc.driver.OracleDriver
        </property>
        <!-- <property name="javax.persistence.validation.mode">none</property> -->
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">create</property><!-- 自动建表 -->
        <mapping class="hibernate.orm.one2one.fk.Country"/>
        <mapping class="hibernate.orm.one2one.fk.Capital"/>
    </session-factory>
</hibernate-configuration>

-----------------------------------------------------------------------------------------------------------------------------------(我割)

2.基于(primary key)主键实现

丈夫<-------->妻子

Husband.java

 1 package hibernate.orm.one2one.pk;
 2 
 3 import javax.persistence.Column;
 4 import javax.persistence.Entity;
 5 import javax.persistence.GeneratedValue;
 6 import javax.persistence.Id;
 7 import javax.persistence.OneToOne;
 8 import javax.persistence.PrimaryKeyJoinColumn;
 9 import javax.persistence.Table;
10 
11 import org.hibernate.annotations.GenericGenerator;
12 import org.hibernate.annotations.Parameter;
13 
14 @Entity
15 @Table(name = "t_husband")
16 public class Husband {
17     private Long id;
18     private String name;
19     private Wife wife;
20 
21     @Id
22     @GenericGenerator(name = "ud", strategy = "foreign", parameters = { @Parameter(name = "property", value = "wife") })
23     @GeneratedValue(generator = "ud")
24     public Long getId() {
25         return id;
26     }
27 
28     public void setId(Long id) {
29         this.id = id;
30     }
31     @Column(length=20)
32     public String getName() {
33         return name;
34     }
35 
36     public void setName(String name) {
37         this.name = name;
38     }
39     @OneToOne
40     @PrimaryKeyJoinColumn
41     public Wife getWife() {
42         return wife;
43     }
44 
45     public void setWife(Wife wife) {
46         this.wife = wife;
47     }
48 
49 }

Wife.java

 1 package hibernate.orm.one2one.pk;
 2 
 3 import javax.persistence.Column;
 4 import javax.persistence.Entity;
 5 import javax.persistence.GeneratedValue;
 6 import javax.persistence.Id;
 7 import javax.persistence.OneToOne;
 8 import javax.persistence.Table;
 9 
10 import org.hibernate.annotations.GenericGenerator;
11 
12 @Entity
13 @Table(name = "t_wife")
14 public class Wife {
15     private Long id;
16     private String name;
17     private Husband husband;
18 
19     @Id
20     @GenericGenerator(name = "ud", strategy = "increment")
21     @GeneratedValue(generator = "ud")
22     public Long getId() {
23         return id;
24     }
25 
26     public void setId(Long id) {
27         this.id = id;
28     }
29 
30     @Column(length = 20)
31     public String getName() {
32         return name;
33     }
34 
35     public void setName(String name) {
36         this.name = name;
37     }
38     @OneToOne(mappedBy="wife")//表之间的关系由Husband类中的wife属性维护
39     public Husband getHusband() {
40         return husband;
41     }
42 
43     public void setHusband(Husband husband) {
44         this.husband = husband;
45     }
46 
47 }

 One2OneTest.java

 1 package hibernate.orm.one2one.pk;
 2 
 3 import hibernate.util.HibernateSessionFactory;
 4 
 5 import org.hibernate.Session;
 6 import org.hibernate.Transaction;
 7 
 8 public class One2OneTest {
 9     public static void main(String[] args) {
10         Session session = HibernateSessionFactory.getSession();
11         Transaction tx = session.beginTransaction();
12         Husband husband = new Husband();
13         husband.setName("阳阳");
14         Wife wife = new Wife();
15         wife.setName("原原");
16         husband.setWife(wife);
17         wife.setHusband(husband);//设置双向关联关系
18         session.save(husband);
19         session.save(wife);
20         tx.commit();
21         HibernateSessionFactory.closeSession();
22 
23     }
24 }

hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="dialect">
            org.hibernate.dialect.Oracle10gDialect
        </property>
        <property name="connection.url">
            jdbc:oracle:thin:@127.0.0.1:1521:xe
        </property>
        <property name="connection.username">hibernate</property>
        <property name="connection.password">123</property>
        <property name="connection.driver_class">
            oracle.jdbc.driver.OracleDriver
        </property>
        <!-- <property name="javax.persistence.validation.mode">none</property> -->
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">create</property><!-- 自动建表 -->
        <mapping class="hibernate.orm.one2one.pk.Husband"/>
        <mapping class="hibernate.orm.one2one.pk.Wife"/>
    </session-factory>
</hibernate-configuration>

 

 

posted on 2012-12-21 12:45  花迹、忆红颜  阅读(870)  评论(0编辑  收藏  举报