Hibernate 双向一对多映射

附代码:

  

public class Order {
    private Integer id;
    private String OrderName;
    private Customer customer;

    public Integer getId() {
        return id;
    }

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

    public String getOrderName() {
        return OrderName;
    }

    public void setOrderName(String orderName) {
        OrderName = orderName;
    }

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

}
Order
public class Customer {
    private Integer id;
    private String customerName;
    private Set<Order> orders = new HashSet<>();

    public Set<Order> getOrders() {
        return orders;
    }

    public void setOrders(Set<Order> orders) {
        this.orders = orders;
    }

    public Integer getId() {
        return id;
    }

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

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

}
Customer
<hibernate-mapping package="com.hibernate.entities.n21.both">
    <class name="Customer" table="CUSTOMERS">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="customerName" type="java.lang.String">
            <column name="CUSTOMER_NAME" />
        </property>
        <set name="orders" table="ORDERS" inverse="true">
            <key>
                <column name="CUSTOMER_ID"></column>
            </key>
            <one-to-many class="Order"/>
        </set>
    </class>
</hibernate-mapping>
Customer.hbm.xml
<hibernate-mapping package="com.hibernate.entities.n21.both">
    <class name="Order" table="ORDERS">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="OrderName" type="java.lang.String">
            <column name="ORDER_NAME" />
        </property>
        <many-to-one name="customer" class="Customer" fetch="join">
            <column name="CUSTOMER_ID" />
        </many-to-one>
    </class>
</hibernate-mapping>
Order.hbm.xml

首先,在 Customer 类中添加了 Set 类型的 orders 属性,用来映射 Order。

Order 数据表通过 Customer_Id 来映射 Customer

在 .hbm.xml mapping 文件中,Customer 使用 set 节点设置了 orders 属性

<set name="orders" table="ORDERS" inverse="true">
            <key>
                <column name="CUSTOMER_ID"></column>
            </key>
            <one-to-many class="Order"/>
</set>

其中:

  name 表示 Customer 中该属性的名字

  table 表示所映射的对象的数据表的表名

  inverse 用来设置由谁来维护映射关系,inverse 英文意思是相反的,此处设置为 true ,意思是让对方来维护映射关系。inverse 的默认值为 false

  子节点 key :用来设置通过哪个列来检索所映射的对象

  one-to-many:通过设置 class 属性来指定所映射的对象的类名

  order-by:设置 Set 集合中对象如何排序,如:order-by=“Order_Name Desc”,其中 Order_Name 表示数据表中的列名, Desc 表示排序方式

在这里,可以通过设置 cascade 来设置级联关系,具体可以百度,教程中建议不用这个属性,但感觉这个属性还是很方便的,此处留个记号,以后研究

posted @ 2017-10-19 17:18  郑能量!  阅读(154)  评论(0编辑  收藏  举报