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

相关文章

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

电脑报错cxcore100.dll丢失怎么办? 多种免费修复缺失的cxcore100.dll文件的技巧

《电脑报错cxcore100.dll丢失怎么办?多种免费修复缺失的cxcore100.dll文件的技巧》你是否也遇到过“由于找不到cxcore100.dll,无法继续执行代码,重新安装程序可能会解... 当电脑报错“cxcore100.dll未找到”时,这通常意味着系统无法找到或加载这编程个必要的动态链接库

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触