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; } }
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; } }
<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>
<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 配置文件中,使用了 <many-to-one> 的标签关联了 Customer 类
其中 name 表示 Order 类中该属性的属性名
class 表示关联的类的类名
fetch 表示加载时的方式,join 表示从数据库获取 Order 类时,会一起把 Order 所关联的 Customer 一同加载到 session 缓存中,而 select 表示加载 Order 时,不加载所关联的Customer,只有当使用 customer 属性时,再加载到缓存中,Hibernate 默认值为 join
当 customer 的一个对象被 order 对象引用时,不能在数据库中删除 customer,因为 order 数据表中有外键指向 customer 表
精诚所至,金石为开。