Hibernate 单向一对多映射

单向 n-1

  单向 n-1 关联只需从 n 的一段访问 1 的一端

  此处 Order 类和 Customer 类,其中 Order 类需要引用 Customer 类

  代码:

  

public class Customer {
    private Integer id;
    private String customerName;

    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
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
<hibernate-mapping>
    <class name="com.hibernate.entities.n21.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>
    </class>
</hibernate-mapping>
Customer.hbm.xml
<hibernate-mapping package="com.hibernate.entities.n21">
    <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="select">
            <column name="CUSTOMER_ID" />
        </many-to-one>
    </class>
</hibernate-mapping>
Order.hbm.xml

  在 Order 的 hbm 配置文件中,使用了 <many-to-one> 的标签关联了 Customer 类

  其中 name 表示 Order 类中该属性的属性名

  class 表示关联的类的类名

  fetch 表示加载时的方式,join 表示从数据库获取 Order 类时,会一起把 Order 所关联的 Customer 一同加载到 session 缓存中,而 select 表示加载 Order 时,不加载所关联的Customer,只有当使用 customer 属性时,再加载到缓存中,Hibernate 默认值为 join

  当 customer 的一个对象被 order 对象引用时,不能在数据库中删除 customer,因为 order 数据表中有外键指向 customer 表

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