hibernate表关联的各种配置

来源:互联网 发布:arduino和单片机区别 编辑:程序博客网 时间:2024/05/15 16:41

hibernate表关联的各种配置:
1、多对多单向:
    user----->role
    user.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.User" table="t_user">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <set name="roles" table="t_user_role">
                    <key column="userid"/>
                    <many-to-many class="com.yourdomain.Role" column="roleid"/>
                </set>
            </class>
        </hibernate-mapping>
    role.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.Role" table="t_role">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
            </class>
        </hibernate-mapping>
2、多对多双向:
    user.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.User" table="t_user">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <set name="roles" table="t_user_role">
                    <key column="userid"/>
                    <many-to-many class="com.yourdomain.Role" column="roleid"/>
                </set>
            </class>
        </hibernate-mapping>
    role.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.Role" table="t_role">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <set name="users" table="t_user_role" order-by="userid">
                    <!--t_user_role是第三方关联表-->
                    <key column="roleid"/>
                    <!--第三方表的作为外键指向本配置对象ID-->
                    <many-to-many class="com.yourdomain.User" column="userid"/>
                    <!--userid作为主键指向与之关联的另一对象ID-->
                </set>
            </class>
        </hibernate-mapping>
3、一对多单向:
    student(多)----->classes(一)
    student.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.Student" table="t_student">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
            </class>
        </hibernate-mapping>
    classes.hbm.xml:
        <hibernate-mapping package="com.yourdomain">
            <class name="Classes" table="t_classes">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <set name="students">
                    <key column="classesid"/>//classesid是在student表中加的一字段列名
                    <one-to-many class="Student"/>
                </set>
            </class>
        </hibernate-mapping>
4、一对多双向:
    student(多)----->classes(一)
    student.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.Student" table="t_student">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <many-to-one name="classes" column="classesid"/>
            </class>
        </hibernate-mapping>
    classes.hbm.xml:
        <hibernate-mapping package="com.yourdomain">
            <class name="Classes" table="t_classes">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <set name="students" inverse="true" cascade="all">//inverse表示维护关系反转,true表示失效,不由classes
                //这端来维护。cascade表示级联,即当对classes操作时,发现还未有student持久化,会自动持久化student的
                    <key column="classesid"/>
                    <one-to-many class="Student"/>
                </set>
            </class>
        </hibernate-mapping>

5、一对一主键关联(单向关联Person---->IdCard)
 一对一主键关联映射:让两个实体对象的id保持相同,这样可以避免多余的字段被创建

Person.java

view plaincopy to clipboardprint?
package com.bjsxt.hibernate;  
 
public class Person {  
 
    private int id;  
      
    private String name;  
      
    private IdCard idCard;   
      
    public int getId() {  
        return id;  
    }  
 
    public void setId(int id) {  
        this.id = id;  
    }  
 
    public String getName() {  
        return name;  
    }  
 
    public void setName(String name) {  
        this.name = name;  
    }  
 
    public IdCard getIdCard() {  
        return idCard;  
    }  
 
    public void setIdCard(IdCard idCard) {  
        this.idCard = idCard;  
    }  
      
      

package com.bjsxt.hibernate;

public class Person {

 private int id;
 
 private String name;
 
 private IdCard idCard;
 
 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public IdCard getIdCard() {
  return idCard;
 }

 public void setIdCard(IdCard idCard) {
  this.idCard = idCard;
 }
 
 
}
 
 Person.hbm.xml://其对应的表中只有id,name两个属性
  <?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.Person" table="t_person">
    <id name="id">
     <generator class="foreign">//主键生成方式受制于IdCard主键生成方式
      <param name="property">idCard</param>
     </generator>
    </id>
    <property name="name"/>
    <one-to-one name="idCard" constrained="true"/>
   </class>
  </hibernate-mapping>

IdCard.java:

view plaincopy to clipboardprint?
package com.bjsxt.hibernate;  
 
public class IdCard {  
      
    private int id;  
      
    private String cardNo;  
 
    public int getId() {  
        return id;  
    }  
 
    public void setId(int id) {  
        this.id = id;  
    }  
 
    public String getCardNo() {  
        return cardNo;  
    }  
 
    public void setCardNo(String cardNo) {  
        this.cardNo = cardNo;  
    }  

package com.bjsxt.hibernate;

public class IdCard {
 
 private int id;
 
 private String cardNo;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getCardNo() {
  return cardNo;
 }

 public void setCardNo(String cardNo) {
  this.cardNo = cardNo;
 }
}
 
 IdCard.hbm.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.IdCard" table="t_idcard">
    <id name="id">
     <generator class="native"/>
    </id>
    <property name="cardNo"/>
   </class>
  </hibernate-mapping>

6、一对一主键关联(双向Person<-------->IdCard)

       与一对一主键关联(单向)大体一致,只不过IdCard.hbm.xml的配置里要一个one-to-ont属性,IdCard.java里加一个Person的引用。

IdCard.java:

view plaincopy to clipboardprint?
package com.bjsxt.hibernate;  
 
public class IdCard {  
      
    private int id;  
      
    private String cardNo;  
      
    private Person person;  
 
    public int getId() {  
        return id;  
    }  
 
    public void setId(int id) {  
        this.id = id;  
    }  
 
    public String getCardNo() {  
        return cardNo;  
    }  
 
    public void setCardNo(String cardNo) {  
        this.cardNo = cardNo;  
    }  
 
    public Person getPerson() {  
        return person;  
    }  
 
    public void setPerson(Person person) {  
        this.person = person;  
    }  

package com.bjsxt.hibernate;

public class IdCard {
 
 private int id;
 
 private String cardNo;
 
 private Person person;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getCardNo() {
  return cardNo;
 }

 public void setCardNo(String cardNo) {
  this.cardNo = cardNo;
 }

 public Person getPerson() {
  return person;
 }

 public void setPerson(Person person) {
  this.person = person;
 }
}
 

IdCard.hbm.xml:

view plaincopy to clipboardprint?
<?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.IdCard" table="t_idcard"> 
        <id name="id"> 
            <generator class="native"/> 
        </id> 
        <property name="cardNo"/> 
        <one-to-one name="person"/> 
    </class> 
</hibernate-mapping> 
<?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.IdCard" table="t_idcard">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="cardNo"/>
  <one-to-one name="person"/>
 </class>
</hibernate-mapping>

7、一对一唯一外键关联(单向Person----->IdCard)

其实是多对对一的一个特例。

Person.java

view plaincopy to clipboardprint?
package com.bjsxt.hibernate;  
 
public class Person {  
 
    private int id;  
      
    private String name;  
      
    private IdCard idCard;   
      
    public int getId() {  
        return id;  
    }  
 
    public void setId(int id) {  
        this.id = id;  
    }  
 
    public String getName() {  
        return name;  
    }  
 
    public void setName(String name) {  
        this.name = name;  
    }  
 
    public IdCard getIdCard() {  
        return idCard;  
    }  
 
    public void setIdCard(IdCard idCard) {  
        this.idCard = idCard;  
    }  
      
      

package com.bjsxt.hibernate;

public class Person {

 private int id;
 
 private String name;
 
 private IdCard idCard;
 
 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public IdCard getIdCard() {
  return idCard;
 }

 public void setIdCard(IdCard idCard) {
  this.idCard = idCard;
 }
 
 
}
 

Person.hbm.xml

view plaincopy to clipboardprint?
<?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.Person" table="t_person"> 
        <id name="id"> 
            <generator class="native"/> 
        </id> 
        <property name="name"/> 
        <many-to-one name="idCard" unique="true"/> 
    </class> 
</hibernate-mapping> 
<?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.Person" table="t_person">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <many-to-one name="idCard" unique="true"/>
 </class>
</hibernate-mapping>

IdCard.java

view plaincopy to clipboardprint?
package com.bjsxt.hibernate;  
 
public class IdCard {  
      
    private int id;  
      
    private String cardNo;  
 
    public int getId() {  
        return id;  
    }  
 
    public void setId(int id) {  
        this.id = id;  
    }  
 
    public String getCardNo() {  
        return cardNo;  
    }  
 
    public void setCardNo(String cardNo) {  
        this.cardNo = cardNo;  
    }  

package com.bjsxt.hibernate;

public class IdCard {
 
 private int id;
 
 private String cardNo;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getCardNo() {
  return cardNo;
 }

 public void setCardNo(String cardNo) {
  this.cardNo = cardNo;
 }
}
 

IdCard.hbm.xml

view plaincopy to clipboardprint?
<?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.IdCard" table="t_idcard"> 
        <id name="id"> 
            <generator class="native"/> 
        </id> 
        <property name="cardNo"/> 
    </class> 
</hibernate-mapping> 
<?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.IdCard" table="t_idcard">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="cardNo"/>
 </class>
</hibernate-mapping>

8、一对一唯一外键关联(双向Person<----->IdCard)

相对于上面的一对一唯一外键关联(单向)不同的是,IdCard.java添加了Person的引用与IdCard.hbm.xml添加了one-to-one标签。

IdCard.java:

view plaincopy to clipboardprint?
package com.bjsxt.hibernate;  
 
public class IdCard {  
      
    private int id;  
      
    private String cardNo;  
      
    private Person person;  
 
    public int getId() {  
        return id;  
    }  
 
    public void setId(int id) {  
        this.id = id;  
    }  
 
    public String getCardNo() {  
        return cardNo;  
    }  
 
    public void setCardNo(String cardNo) {  
        this.cardNo = cardNo;  
    }  
 
    public Person getPerson() {  
        return person;  
    }  
 
    public void setPerson(Person person) {  
        this.person = person;  
    }  

package com.bjsxt.hibernate;

public class IdCard {
 
 private int id;
 
 private String cardNo;
 
 private Person person;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getCardNo() {
  return cardNo;
 }

 public void setCardNo(String cardNo) {
  this.cardNo = cardNo;
 }

 public Person getPerson() {
  return person;
 }

 public void setPerson(Person person) {
  this.person = person;
 }
}
 

IdCard.hbm.xml:

view plaincopy to clipboardprint?
<?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.IdCard" table="t_idcard"> 
        <id name="id"> 
            <generator class="native"/> 
        </id> 
        <property name="cardNo"/> 
        <one-to-one name="person" property-ref="idCard"/> 
    </class> 
</hibernate-mapping> 

 

原创粉丝点击