返回介绍

Demo

发布于 2025-01-04 01:27:28 字数 2761 浏览 0 评论 0 收藏 0

Hibernate 使用 元素来映射多对一关联关系 <many-to-one name="customer" class="Customer" column="CUSTOMER_ID" cascade="all" />

  • name: 设定待映射的持久化类的属性的名字
  • column: 设定和持久化类的属性对应的表的外键
  • class:设定待映射的持久化类的属性的类型
  • cascade:意味着系统将先自动级联插入主表记录,也就是说先持久化 Customer 对象,再持久化 Person 对象。开发时不建议使用该属性,建议使用手工的方式。

下面是实体对象,分为 Customer(顾客)和 Order(订单),其中订单和顾客是 N-1 关系。

public class Customer {
    private Integer customerId;
    private String customerName;
    //省去 get 和 set 方法
}
public class Order {
    private Integer orderId;
    private String orderName;
    private Customer customer;
        //省去 get 和 set 方法
}

Customer.hbm.xml

<hibernate-mapping>
    <class name="com.lihui.hibernate.single_n_1.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>
    </class>
</hibernate-mapping>

Order.hbm.xml

<hibernate-mapping package="com.lihui.hibernate.single_n_1">
    <class name="Order"
        table="ORDERS">
        <id name="orderId" type="java.lang.Integer">
            <column name="ORDER_ID" />
            <generator class="native" />
        </id>
        <property name="orderName" type="java.lang.String">
            <column name="ORDER_NAME" />
        </property>
        <many-to-one name="customer" class="Customer" column="CUSTOMER_ID" cascade="all" />
    </class>
</hibernate-mapping>

Junit Test 由于在 Order.hbm.xml 中配置了 cascade="all" ,所以只需要保存 order 对象即可,会首先自动保存级联的 Customer 对象。

@Test
    public void testSave() {
        Customer customer = new Customer();
        customer.setCustomerName("a");

        Order order1 = new Order();
        order1.setOrderName("A");
        order1.setCustomer(customer);
        Order order2 = new Order();
        order2.setOrderName("B");
        order2.setCustomer(customer);

        session.save(order1);
        session.save(order2);
    }

我最近在复习一下关于 Hibernate 关系映射的知识,看了书本的介绍以及视频。这几篇博客都是对学到知识的一点总结。当然,这些这是最基本的能够实现关联关系的配置,在实际的使用中,还有很多参数需要根据情况来设置。但也算是对以后开发过程中遇到遗忘的地方可以进行查阅。

在本文中使用的 Demo 也都已经上传到 github 中,里边有详细的运行说明。

Github 地址: HibernateRelationMapping

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文