Hibernate联合主键 注解方式实现

Hibernate注解映射联合主键 联合主键用Hibernate注解映射方式主要有三种: 第一、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@Id 第二、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@EmbeddedId 第三、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并要重写equals和hashcode.最后在主类中(该类包含联合主键类中的字段)将联合主键字段都注解为@Id,并在该类上方将上这样的注解:@IdClass(联合主键类.class) 立即下载

项目中遇到的问题: 用户表,标签表,用户标签关系表。其中用户标签关系表中,保存用户id和标签id,为保证数据唯一,用户id和标签id作为联合主键。分享一下过程。

1.建表语句

CREATE TABLE `bifex_nr`.`test_user_label_relation`  (
  `userId` int(11) NOT NULL,
  `labelId` int(11) NOT NULL,
  PRIMARY KEY (`userId`, `labelId`)
);

2.实体的设置 注解方式

  2.1 实体类代码

import javax.persistence.*;

@Entity
@Table(name = "test_user_label_relation")
public class TestUserLabelRelation {

    private UserLabelRelationPk relationPk;

    @Id
    @Embedded
    @AttributeOverrides({
            @AttributeOverride(name = "userId", column = @Column(name = "user_id")),
            @AttributeOverride(name = "labelId", column = @Column(name = "label_id"))
    })
    public UserLabelRelationPk getRelationPk() {
        return relationPk;
    }

    public void setRelationPk(UserLabelRelationPk relationPk) {
        this.relationPk = relationPk;
    }

}

  2.2 主键类 代码 

import javax.persistence.Embeddable;
import java.io.Serializable;

@Embeddable
public class UserLabelRelationPk implements Serializable {

    private Integer userId;

    private Integer labelId;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public Integer getLabelId() {
        return labelId;
    }

    public void setLabelId(Integer labelId) {
        this.labelId = labelId;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

        if (!(obj instanceof UserLabelRelationPk)) {
            return false;
        }

        UserLabelRelationPk key = (UserLabelRelationPk) obj;

        if (!userId.equals(key.getUserId())) {
            return false;
        }

        if (!labelId.equals(key.getLabelId())) {
            return false;
        }

        return true;
    }

    @Override
    public int hashCode() {

        int result = 0;

        result = userId == null ? 0 : userId.hashCode();
        result = 29 * (labelId == null ? 0 : labelId.hashCode()) + result;
        return result;
    }

}

还有其他两种实现方式 可以参考:http://www.voidcn.com/article/p-fggouqde-bam.html

 

 

Hibernate联合主键的例子 Hibernate联合主键,MyEclipse的例子 立即下载

相关推荐

Hibernate一对一单向外键关联 (联合主键annotation)

NULL 博文链接:https://cdxs2.iteye.com/blog/1932507

hibernate联合主键的三种注解做法

1.给组件类加上@Embeddable注解,给实体类的主键属性加上@Id 如组件类如下写: package vo; import java.io.Serializable; import javax.persistence.Embeddable; @Embeddable public class StudentPK implements Serializable{  private

David_Tsai23的专栏 1004

java hibernate使用注解来定义联合主键

主要介绍了java hibernate使用注解来定义联合主键的相关资料,需要的朋友可以参考下

java 联合主键 注解_Hibernate的联合主键注解方式

Hibernate联合主键注解方式,即是Hibernate中某一张表出现多个字段联合为唯一主键的情况。这时候就可以使用Hibernate的联合主键来操作。以用户表为例子,userId+userName为唯一主键,因为有时候会出现多个用户的姓名是一样的,如果加上userId就可以控制唯一,判断是否是同一个用户。注:主键类(UserPK类)是指只有userId和userName的联合字段的类,即是多个...

weixin_34357697的博客 701

打造你自己的小程序容器 —— 一套能装得下整个未来的跨端技术!

摘要: 本文介绍了一种基于Capacitor框架开发的轻量级“小程序容器”解决方案——LapDrop。通过模拟微信小程序的运行逻辑(动态加载、原生能力调用、沙盒环境),LapDrop允许开发者自主构建跨平台(iOS/Android/Web)的小程序生态。其核心利用Capacitor的插件桥接机制,实现JS与原生功能的无缝调用,并支持浏览器调试与原生环境一致化。优势包括插件化架构、状态隔离、热更新及开放权限控制,适用于企业级模块化应用或开发者工具。未来计划扩展生命周期管理、远程加载等功能,目标成为开源的小程序

CangYuChenAi的博客 977

硬件作品3----STM32F103RCT6最小系统板MCU配置

电路未调试成功,目前刚打板,后续需要补充或者改版另行注明。

weixin_58364194的博客 5568

Hibernate注解映射联合主键的三种主要方式

参考文章: Hibernate注解映射联合主键的三种主要方式 今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateSessionFactory' define...

justlpf的专栏 1155

基于STM32L4XX、HAL库的AP6275S WIFI 模块驱动程序设计

支持802.11a/b/g/n/ac/ax (Wi-Fi 6)标准。// 这部分通常依赖于Broadcom提供的固件和驱动。// 这里需要添加Wi-Fi固件加载和初始化的代码。// 通常需要通过SDIO发送命令和接收响应。// 这里需要添加蓝牙HCI初始化代码。// 处理Wi-Fi和蓝牙数据。// 这里需要实现Wi-Fi连接逻辑。// 初始化SDIO和UART。// 确保蓝牙使能引脚已设置。// 关闭Wi-Fi和蓝牙。// 关闭Wi-Fi和蓝牙。// 打开Wi-Fi和蓝牙。// 初始化AP6275S。

zhusl6688的博客 278

hibernate 注解方式实现联合主键

联合主键的实现方式有三种 方式1.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@Id   @Embeddable public class DogPrim...

u010501497的博客 419

成功解决使用jupyter notebook命令打开原先存的.ipynb文件突然消失的问题

成功解决使用jupyter notebook命令打开原先存的.ipynb文件突然消失的问题 目录 解决问题 解决思路 解决方法 T1、修改默认配置 T2、修改后缀参数(此方法是其他网友推荐,博主没有尝试) T3、如果以上还不成功,这个时候很可能是环境配置有问题 解决问题 使用jupyter notebook命令打开原先存的.ipynb文件突然消失的问题 解决思路 使用jupyter notebook命令打开原先存的.ipynb文件突然消失,说明...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 5118

innovus:ccopt_design流程

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?spec文件可以只创建一次,无需多次创建。2)virtual balance阶段。3)Full Balancing阶段。4)Clock Routing阶段。1)clustering阶段。

m0_61544122的博客 2481

java复合主键注解_Java进阶知识06 Hibernate联合主键之Annotation(注解)和XML实现方式...

1、Hibernate联合主键(Annotation实现)1.1、单列主键1.1.1、为什么要有主键? //唯一确定一条记录1.1.2、一个表能否有多个主键?//不能1.1.3、为什么把id设为主键? //如果有其他的方式可以作为主键,id可以不要1.1.4、主键生成策略:identity:自增长,对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置...

weixin_42220669的博客 443

ADS基础教程22 - 有限元电磁仿真(FEM)

一、引言二、FEM操作过程1.新建Layout1.新建Layout2.EM设置3.设置Frequency plan4.设置Output plan5.设置Options6.设置网格频率7.仿真结果三、总结介绍了在ADS中如何进行FEM仿真过程。END!}}END!

XZ_ZC的博客 2584

Java知识点05 Hibernate联合主键之Annotation(注解)和XML实现方式

1、Hibernate联合主键(Annotation实现) 1.1、单列主键 1.1.1、为什么要有主键? //唯一确定一条记录 1.1.2、一个表能否有多个主键? //不能 1.1.3、为什么把id设为主键? //如果有其他的方式可以作为主键,id可以不要 1.1.4、主键生成策略: identity:自增长,对DB2,MySQL, MS...

weixin_30273175的博客 230

Linux Kernel入门到精通系列讲解 - 总目录

在学习Linux Kernel之前,需要先准备开发环境,方便后续进行开发。可以根据自身情况,选择性阅读该章节。学习该章节之前,你应该了解一下网络概念,明白为什么要讲这些,才能更有方向的去理解学习。Linux ARM平台开发系列讲解(设备树篇) 4.1.1 设备树的原理详解。本项目完全开源,仅供学习使用,如需其他用途,请与本人联系。),本章节你可以学习到。摄像头V4L2子系统、Linux kernel常用的子系统等,ARM架构、RISCV架构、Uboot等。

DSMGUOGUO的博客 1万+

基于YOLOv8的水果新鲜程度检测系统设计与实现

数据采集与预处理模块:负责收集水果图像数据并进行标注和增强深度学习模型:基于YOLOv8的目标检测模型新鲜度评估模块:根据检测结果评估水果新鲜程度用户界面:提供友好的交互界面系统集成:将各模块整合为完整系统水果新鲜程度检测需要包含多种水果在不同新鲜度状态下的图像数据集。:包含5种常见水果(苹果、香蕉、橙子、葡萄、草莓)在不同新鲜度下的图像包含约8,000张图像,分为新鲜和腐烂两类AgriVision:大型农业图像数据集,包含水果检测和分类任务Fruit-360:包含120种水果的高质量图像。

YOLO 445

Hibernate 中的联合主键解决方案

有时候一张表中会定义多个主键,即联合主键,Hibernate 对联合主键也提供了支持,由于 Annotation 现在用的比 XML 更加流行,则本文以 Annotation 讲解。 既然一张表中定义了联合主键,则在面向对象的思想中,他们都是主键,在 JAVA 中可以专门定义一个类来存放主键,Hibernate 文档说明此主键类必须实现 Serializable 接口,并且要重写 equals() 方法和 hashCode() 方法。定义如下主键类 ApplePk: 1: package

MZULE 优快云 1086

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java实体类设置联合主键_javahibernate使用注解来定义联合主键

java hibernate使用注解来定义联合主键下面使用hibernate的API中说明的三种方式来定义主键,主要使用Annotation来定义hibernate中的联合主键下面取至hibernate的API文档:定义组合主键的几种语法:1、将组件类注解为@Embeddable,并将组件的属性注解为@Id2、将组件的属性注解为@EmbeddedId3、将类注解为@IdClass,并将该实体中所有...

weixin_30246273的博客 1641

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

联合主键用hibernate注解映射方式主要有三种:

将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode 第一、将该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@Id 第二、在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该...

weixin_30352645的博客 90

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

hibernate 联合主键

Hibernate 联合主键有三种写法 : 第一种:使用 @Embeddable注解    import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class TestPerson implements Serializ...

u014164005的博客 421

(2)id:单个属性(AUTO、Table)联合主键三种实现方式

一、单个主键@Entity //从这个包(javax.persistence.Entity)可以看出,是个标准,不依赖于hibernate //@Table(name="_Teacher") //当model类和数据库的表名,不一致时,应该在这里指定。在这里类名为:teacher,表名是:_Teacher//生成一个表名是GENERATOR_TABLE的表,有两个字段pk_key、pk_value

FixedStar 的博客 6270

【hibernate框架10】如何配置联合主键-XML与Annotation样例剖析

首先看看什么是联合主键: 联合主键一般以表中的两个或两个以上的元素作为主键。 一般的联合主键,在数据库中设置就可以了。但是,如果你想用hibernate对主键做映射的话,则需要用面向对象的方法去操作它。 那么,如何用面向对象的方法去得到它呢?而又如何以面向对象的方式分配主键呢? 有两种方式: XML配置联合主键和Annotation配置联合主键。 XML配置联合主键: 操作方式:...

weixin_38213517的博客 241

Hibernate 使用 Annotation 之 联合主键

hibernate使用annotation注释的方法来映射联合主键查看hibernate文档有三种方法: 1,将主键类注解为@Embeddable,并将主键的属性注解为@Id; 2,将主键的属性注解为@EmbeddedId; 3,将类注解为@IdClass,并将该实体类种的所有属性主键的属性都注解为@Id; 常用的有第二第三种,下面给出三种的例子程序: ---------------主键

liangoo7的专栏 1033
上一篇: SpringBoot中Shiro使用身份认证配置
下一篇: 项目踩坑:List和Set的互转
codeLife1993
博客等级 码龄8年 23粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值