hibernate中关联关系的小结

简介: 一对一方案1: 一对一的表现是形式是建立在一对多的基础之上。让外键唯一就可以变成一对一 类的写法: Users类 public class Users{     private Long userid;     private String username;     //看着是一对多。实质由于外键放已经具备唯一约束,所以set集合中只有一条数据     private S
一对一方案1:
一对一的表现是形式是建立在一对多的基础之上。让外键唯一就可以变成一对一
类的写法:
Users类
public class Users{
    private Long userid;
    private String username;
    //看着是一对多。实质由于外键放已经具备唯一约束,所以set集合中只有一条数据
    private Set<Orders> orderses = new HashSet<Orders>();
}
Orders类:
public class Orders{
    private Long orderid;
    private Double price;
    private Users users;
}
配置文件:
Users配置文件:
<hibernate-mapping>
    <class name="com.puke.domain.Users" table="USERS" schema="PUKE12">
        <id name="userid" type="java.lang.Long">
            <column name="USERID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="username" type="java.lang.String">
            <column name="USERNAME" length="40" />
        </property>
        <!-- set标签的作用:告知Hibernate在当前一方中关联多方的那个集合对象的名字 -->
        <set name="orderses" inverse="true" >
            <!-- key column 告知hibernate表中的外键是谁 -->
            <key>
                <column name="USER_ID" precision="22" scale="0" unique="true" />
            </key>
            <!--
            one-to-many 这个标签的含义:
            1,告知hibernate当前user与order的关系
               2,告知hibernate当前多方的class标签name的值,获取这个class节点中的table属性的值,这样hibernate就知道当前的
               USER_ID位于哪个表中。
               3,告知bibenrate当前set集中放存放什么对象
             -->
            <one-to-many class="com.puke.domain.Orders" />
        </set>
    </class>
</hibernate-mapping>

Orders配置文件:
<hibernate-mapping>
    <class name="com.puke.domain.Orders" table="ORDERS" schema="PUKE12">
        <id name="orderid" type="java.lang.Long">
            <column name="ORDERID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <many-to-one name="users" class="com.puke.domain.Users" fetch="select">
            <column name="USER_ID" precision="22" scale="0" unique="true" />
        </many-to-one>
        <property name="price" type="java.lang.Double">
            <column name="PRICE" precision="6" />
        </property>
    </class>
</hibernate-mapping>

一对一的方案2:
一对一的表现形式就是一对一
Users类:
public class Users{
    private Long userid;
    private String username;
    private Orders orders;
}
Orders类:
public class Orders{
private Long orderid;
    private Double price;
    private Users users;
}
配置文件:
Users配置文件:
<hibernate-mapping>
    <class name="com.puke.domain.Users" table="USERS" schema="PUKE12">
        <id name="userid" type="java.lang.Long">
            <column name="USERID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="username" type="java.lang.String">
            <column name="USERNAME" length="40" />
        </property>
        <!-- set标签的作用:告知Hibernate在当前一方中关联多方的那个集合对象的名字 -->
        <one-to-one name="orders" class="com.puke.domain.Orders"></one-to-one>
    </class>
</hibernate-mapping>

Orders配置文件:
<hibernate-mapping>
    <class name="com.puke.domain.Orders" table="ORDERS" schema="PUKE12">
        <id name="orderid" type="java.lang.Long">
            <column name="ORDERID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <many-to-one name="users" class="com.puke.domain.Users" fetch="select">
            <column name="USER_ID" precision="22" scale="0" unique="true" />
        </many-to-one>
        <property name="price" type="java.lang.Double">
            <column name="PRICE" precision="6" />
        </property>
    </class>
</hibernate-mapping>

一对多:
类的写法:
一方:Users
public class Users{
    private Long id;
    private String username;
    private Set<Orders2> orders2s = new HashSet<Orders2>();
}
多方:Orders
public class Orders{
    private Long id;
    private Double price;
    private Users2 users2;
}

配置文件:
一方的配置文件:
<hibernate-mapping>
    <class name="com.puke.domain2.Users2" table="USERS2" schema="PUKE12">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="username" type="java.lang.String">
            <column name="USERNAME" length="40" />
        </property>
        <set name="orders2s" inverse="true">
            <key>
                <column name="USERS_ID" precision="22" scale="0" />
            </key>
            <one-to-many class="com.puke.domain2.Orders2" />
        </set>
    </class>
</hibernate-mapping>

多方配置文件:
<hibernate-mapping>
    <class name="com.puke.domain2.Orders2" table="ORDERS2" schema="PUKE12">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <many-to-one name="users2" class="com.puke.domain2.Users2" fetch="select">
            <column name="USERS_ID" precision="22" scale="0" />
        </many-to-one>
        <property name="price" type="java.lang.Double">
            <column name="PRICE" precision="6" />
        </property>
    </class>
</hibernate-mapping>

多对多;

目录
相关文章
|
编译器 开发工具 C#
使用MindOpt时常见的报错,以及对应的解决方法
使用MindOpt时常见的报错,以及对应的解决方法
|
存储 Oracle 关系型数据库
postgresql数据库|wal日志的开启以及如何管理
postgresql数据库|wal日志的开启以及如何管理
2220 0
|
C语言 C++
【C语言】题目的多种解法分享3
【C语言】题目的多种解法分享3
168 1
|
12月前
|
存储 缓存 Oracle
Java线程池,白话文vs八股文,原来是这么回事!
本文介绍了Java线程池的原理、实现方式及相关参数。首先,通过类比公司员工的方式解释了线程池的核心概念,如核心线程、最大线程数、任务队列和拒绝策略。接着,详细描述了线程池的任务处理流程,并提供了使用`ThreadPoolExecutor`和`Executors`创建线程池的代码示例,强调了`ThreadPoolExecutor`的灵活性和`Executors`的局限性。最后,总结了线程池的相关参数及不同类型的线程池实现,并附带常见面试题及其解答,帮助读者全面理解线程池的应用场景和优化方法。
161 4
|
Java 网络架构 Kotlin
kotlin+springboot入门级别教程,教你如何用kotlin和springboot搭建http
本文是一个入门级教程,介绍了如何使用Kotlin和Spring Boot搭建HTTP服务,并强调了Kotlin的空安全性特性。
375 8
kotlin+springboot入门级别教程,教你如何用kotlin和springboot搭建http
|
存储 运维 关系型数据库
开源新发布|PolarDB-X v2.4.1 增强企业级运维能力
PolarDB-X 是阿里云推出的云原生分布式数据库,自2021年10月开源以来,持续迭代升级,至2024年4月发布的v2.4.1版本,重点增强了企业级运维能力,如无锁变更、物理扩缩容、数据TTL等,提供金融级高可用、透明分布式、HTAP一体化等特性。PolarDB-X 支持集中式和分布式一体化形态,兼容MySQL生态,适用于金融、通信、政务等行业。
1974 101
|
机器学习/深度学习 数据采集 关系型数据库
机器学习入门:使用Scikit-learn进行实践
机器学习入门:使用Scikit-learn进行实践
516 1
|
SQL 算法
基于若依的ruoyi-nbcio流程管理系统修改代码生成的sql菜单id修改成递增id(谨慎修改,大并发分布式有弊端)
基于若依的ruoyi-nbcio流程管理系统修改代码生成的sql菜单id修改成递增id(谨慎修改,大并发分布式有弊端)
299 1
|
存储 缓存 云计算
云计算在视频流处理与分发中的技术挑战
云计算在视频流处理与分发中的技术挑战
|
机器学习/深度学习 算法 物联网
大模型进阶微调篇(一):以定制化3B模型为例,各种微调方法对比-选LoRA还是PPO,所需显存内存资源为多少?
本文介绍了两种大模型微调方法——LoRA(低秩适应)和PPO(近端策略优化)。LoRA通过引入低秩矩阵微调部分权重,适合资源受限环境,具有资源节省和训练速度快的优势,适用于监督学习和简单交互场景。PPO基于策略优化,适合需要用户交互反馈的场景,能够适应复杂反馈并动态调整策略,适用于强化学习和复杂用户交互。文章还对比了两者的资源消耗和适用数据规模,帮助读者根据具体需求选择最合适的微调策略。
3944 5