Hibernate实体关系映射技巧

2024-08-26 05:48

本文主要是介绍Hibernate实体关系映射技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      关于实体关系的映射,常用三种,多对一,一对多和多对多,模板如下。


       实体映射的书写是有一定的技巧的,下面以一个权限的实体为例,与大家一起分享。

         

<span style="font-size:18px;">package cn.itcast.oa.domain;import java.util.HashSet;
import java.util.Set;/*** 权限* @author David**/
public class Privilege {private Long id;private String url;private String name; //权限名称private Set<Role> roles = new HashSet<Role>();private Privilege parent;//上级权限private Set<Privilege> children = new HashSet<Privilege>();//下级权限public Privilege() {}public Privilege(String url, String name, Privilege parent) {super();this.url = url;this.name = name;this.parent = parent;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Role> getRoles() {return roles;}public void setRoles(Set<Role> roles) {this.roles = roles;}public Privilege getParent() {return parent;}public void setParent(Privilege parent) {this.parent = parent;}public Set<Privilege> getChildren() {return children;}public void setChildren(Set<Privilege> children) {this.children = children;}}
</span>

          从上面代码可以看出,权限中有上级和下级,关系是一对多。

          下面展示写代码的技巧。

          1、写注释,

          格式为?属性,表达的是本对象与?与?关系。

<span style="font-size:18px;"><!-- parent属性,本类与Privilege(上级)的多对一 --><!-- children属性,本类与Privilege(下级)的一对多 --></span>

        2、拷模板

          将上面对应的模板复制过来。

<span style="font-size:18px;"><!-- parent属性,本类与Privilege(上级)的多对一 --><many-to-one name="" class="" column=""></many-to-one><!-- children属性,本类与Privilege(下级)的一对多 --><set name=""><key column=""></key><one-to-many class=""/></set></span>
        3、填空

        name属性:属性名(注释中的第1问号)

        class属性:关联的实体类型(注释中的第2个问号)

        column属性:<many-to-one column="..">:一般可以写成属性名加Id后缀,如属性为department,则column值写成departmentId.一对多种的<key column="..">:从关联的对方(对方是多对一)映射中把column值拷贝过来。

<span style="font-size:18px;"><!-- parent属性,本类与Privilege(上级)的多对一 --><many-to-one name="parent" class="Privilege" column="parentId"></many-to-one><!-- children属性,本类与Privilege(下级)的一对多 --><set name="children"><key column="parentId"></key><one-to-many class="Privilege"/></set></span>

         从实体代码中还可以看出, 实体Privilege和Role实体是多对多的关系。实体映射与上面同理,不再展示详细过程,只说不同之处。

         多对多的关系在填空的时候遵守规则:多对多种的<key column="...">:一般可以写成本对象的名加Id后缀,如本对象名为User,则写成userId。多对多种的<many-to-many column="...">:一般可以写为关联对象的名称加Id后缀。

<span style="font-size:18px;"><!-- roles属性,本类与Role的多对多 --><set name="roles" table="itcast_role_privilege"><key column="privilegeId"></key><many-to-many class="Role" column="roleId"></many-to-many></set></span>

         到这里大家就对其的映射技巧有所了解了吧,多实践,将其熟练的运用,想忘都忘不了。


       

        

这篇关于Hibernate实体关系映射技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107723

相关文章

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa