12-13.Hibernate

    xiaoxiao2021-04-18  51

    1.在1的端,有一个set的属性,在mapping文件中,用set来映射1到多的一端的关系.一般1的一端不要维护关联关系,设置inverse为true,放弃维护.

    /* * 1. 声明集合类型时, 需使用接口类型, 因为 hibernate 在获取 * 集合类型时, 返回的是 Hibernate 内置的集合类型, 而不是 JavaSE 一个标准的 * 集合实现. * 2. 需要把集合进行初始化, 可以防止发生空指针异常 */ private Set<Order1> order1s = new HashSet<>(); <!-- 映射 1 对多的那个集合属性 --> <!-- set: 映射 set 类型的属性, table: set 中的元素对应的记录放在哪一个数据表中. 该值需要和多对一的多的那个表的名字一致 --> <!-- inverse: 指定由哪一方来维护关联关系. 通常设置为 true, 以指定由多的一端来维护关联关系 --> <!-- cascade 设定级联操作. 开发时不建议设定该属性. 建议使用手工的方式来处理:delete,save-update. --> <!-- order-by 在查询时对集合中的元素进行排序, order-by 中使用的是表的字段名, 而不是持久化类的属性名 --> <set name="order1s" table="ORDERS" inverse="true" cascade="delete" order-by="ORDER_NAME DESC"> <!-- 执行多的表中的外键列的名字 --> <key column="CUSTOMER_ID"></key> <!-- 指定映射类型 --> <one-to-many class="com.hgh.hibernate.nto1.both.Order1"/> </set> <?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 package="com.atguigu.hibernate.entities.n21.both"> <class name="Customer" table="CUSTOMERS"> <id name="customerId" type="java.lang.Integer"> <column name="CUSTOMER_ID" /> <generator class="native" /> </id> <property name="customerName" type="java.lang.String"> <column name="CUSTOMER_NAME" /> </property> <!-- 映射 1 对多的那个集合属性 --> <!-- set: 映射 set 类型的属性, table: set 中的元素对应的记录放在哪一个数据表中. 该值需要和多对一的多的那个表的名字一致 --> <!-- inverse: 指定由哪一方来维护关联关系. 通常设置为 true, 以指定由多的一端来维护关联关系 --> <!-- cascade 设定级联操作. 开发时不建议设定该属性. 建议使用手工的方式来处理 --> <!-- order-by 在查询时对集合中的元素进行排序, order-by 中使用的是表的字段名, 而不是持久化类的属性名 --> <set name="orders" table="ORDERS" inverse="true" order-by="ORDER_NAME DESC" > <!-- 执行多的表中的外键列的名字 --> <key column="CUSTOMER_ID"></key> <!-- 指定映射类型 --> <one-to-many class="Order"/> </set> </class> </hibernate-mapping> package com.atguigu.hibernate.entities.n21.both; import java.util.HashSet; import java.util.Set; public class Customer { private Integer customerId; private String customerName; /* * 1. 声明集合类型时, 需使用接口类型, 因为 hibernate 在获取 * 集合类型时, 返回的是 Hibernate 内置的集合类型, 而不是 JavaSE 一个标准的 * 集合实现. * 2. 需要把集合进行初始化, 可以防止发生空指针异常 */ private Set<Order> orders = new HashSet<>(); public Integer getCustomerId() { return customerId; } public void setCustomerId(Integer customerId) { this.customerId = customerId; } public String getCustomerName() { return customerName; } public void setCustomerName(String customerName) { this.customerName = customerName; } public Set<Order> getOrders() { return orders; } public void setOrders(Set<Order> orders) { this.orders = orders; } }
    转载请注明原文地址: https://ju.6miu.com/read-674737.html

    最新回复(0)