hiberante中使用复合主键

Autodesk激活无无网络选项?许可类型与脱机激活排查修复指南 软件许可激活是保障正版授权正常使用的核心环节,常见的授权模式包括单机版许可和网络版许可,两者在认证机制和应用场景上有所区别。单机版离线授权依托 FlexNet Licensing Service 等底层服务组件,在断网或内网环境下为用户提供可靠的技术支持与授权验证路径。然而在实际部署中,激活窗口并不总是显示“无网络激活方式”入口,这可能与许可类型选择、网络环境干扰、组件安装残留或系统时间偏差有关。理解入口的动态呈现逻辑与排查顺序,有助于在 AutoCAD、Revit 等 Autodesk 产品中高效解决脱机 阅读详情

对于新系统的设计开发而言,我们应尽量避免在库表中引入与业务逻辑相关的主键关系。将业务逻辑主键引入库表,以后业务逻辑的变化,将很可能对底层数据库结构产生连带影响。复合主键的引入,很大程度上意味着业务逻辑已经侵入到数据存储逻辑之中。因此,应尽量避免。但实际情况中,我们必须面对遗留系统的旧表开发,这时,对现有复合主键的支持就非常必要。

hibernate中,通过composite-id节点对复合主键进行定义。
我们可以通过两种形式确定主键:
1)基于实体类属性的复合主键
2)基于主键类的复合主键

下面通过例子看一下两种方式的用法。

我们建一个用户表user(firstname, lastname, age),以firstname, lastname作为复合主键。建表语句:
CREATE TABLE `hbm_test`.`user` (
  `firstname` VARCHAR(50) NOT NULL DEFAULT '',
  `lastname` VARCHAR(50) NOT NULL DEFAULT '',
  `age` INTEGER UNSIGNED DEFAULT 0,
  PRIMARY KEY(`firstname`, `lastname`)
)
ENGINE = InnoDB;

1)基于实体类属性的复合主键

映射文件如下:
<class name="User" table="user">

<composite-id>
 <key-property
  name="Lastname"
  column="lastname"
  type="string"
 />
 <key-property
  name="Firstname"
  column="firstname"
  type="string"
 />
</composite-id>

<property
 name="Age"
 column="age"
 type="integer"
 not-null="false"
 length="10"
/>

</class>

通过composite-id节点声明了一个复合主键,是由“firstname" "lastname"组成。

实体类User中包含了复合主键firstname lastname,hibernate要求复合主键类实现equals hashCode,以作为不同数据间的识别的标志。

public class User implements Serializable{
 private String firstname;
 private String lastname;
 private int age;
 
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String getFirstname() {
  return firstname;
 }
 public void setFirstname(String firstname) {
  this.firstname = firstname;
 }
 public String getLastname() {
  return lastname;
 }
 public void setLastname(String lastname) {
  this.lastname = lastname;
 }
 
 public boolean equals(Object obj){
  if(!(obj instanceof User)){
   return false;
  }else{
   User user = (User)obj;
   return new EqualsBuilder().appendSuper(super.equals(obj))
      .append(this.firstname, user.firstname)
      .append(this.lastname, user.lastname)
      .isEquals();
  }
 }
 
 public int hashCode(){
  return new HashCodeBuilder(-528253723, -475504089)
     .appendSuper(super.hashCode())
     .append(this.firstname)
     .append(this.lastname)
     .toHashCode();
 }
}

EqualsBuilder HashCodeBuilder均为 apache common lang包中的工具类。

对于Session.load方法,我们可将User类对象本身作为查询条件:

User user = new User();
user.setFirstname("hello");
user.setLastname("world");
user = (User)session.load(User.class, user);
System.out.println("age: " + user.getAge());

2)基于主键类的复合主键

我们可以将主键逻辑加以分离,以一个单独的主键类对复合主键进行描述。
现在把User中的firstname lastname提取到一个独立的主键类UserPK中:

public class UserPK implements Serializable{
 private String firstname;
 private String lastname;
 public String getFirstname() {
  return firstname;
 }
 public void setFirstname(String firstname) {
  this.firstname = firstname;
 }
 public String getLastname() {
  return lastname;
 }
 public void setLastname(String lastname) {
  this.lastname = lastname;
 }
 
}

之后修改映射文件的composite-id节点:
<composite-id name="userPk" class="UserPK">
 <key-property
  name="Lastname"
  column="lastname"
  type="string"
 />
 <key-property
  name="Firstname"
  column="firstname"
  type="string"
 />
</composite-id>

<property
 name="Age"
 column="age"
 type="integer"
 not-null="false"
 length="10"
/>

只是配置了name和class属性,name指定了实体类中的主键类属性名,class指定了主键类类型。

User.java修改如下:
public class User implements Serializable{
 private UserPK userPk;
 private int age;
 
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public UserPK getUserPk() {
  return userPk;
 }
 public void setUserPk(UserPK userPk) {
  this.userPk = userPk;
 }
 
}

之后,我们即可通过UserPK进行数据查询:
UserPK userPk = new UserPK();
userPk.setFirstname("hello");
userPk.setLastname("world");
User user = (User)session.load(User.class, userPk);
System.out.println("age: " + user.getAge());

4、机器人建模、规划与控制及运动学知识解析 本博客深入解析了机器人建模、规划与控制的核心内容,涵盖运动学与动力学的基本原理,并结合典型应用场景探讨了移动机器人与操作器的控制策略。同时,博客还介绍了机器人技术的发展趋势及其在工业和服务领域的广泛应用。 阅读详情

相关推荐

NVIDIA驱动版本太低?手把手教你解决CUDA与PyTorch版本冲突问题

本文针对深度学习开发中常见的NVIDIA驱动版本过低导致的CUDA与PyTorch版本冲突问题,提供了从根源理解到实战解决的完整指南。文章详细解析了驱动、CUDA与PyTorch的依赖关系,并给出了升级驱动、降级PyTorch、使用Conda环境管理及Docker容器化四种核心解决方案,帮助开发者快速诊断并构建稳定的GPU开发工作流。

grpc6streamer的博客 970

Hibernateday05对象当中的几个属性组合作为表的主键【实体类属性的复合主键】...

复合主键    注意:1.对象必须实现序列化接口   1.对象当中的几个属性组合作为表的主键【实体类属性的复合主键】    O    StudnetMsg          stuId//学号      courseId//课程      grade//分数   R create table g_stuMsg(      stuId integer,      courseId...

Tyan520的专栏 388

ML307A模组通过MQTT协议接入OneNET平台的AT指令全解析

本文详细解析了ML307A模组通过MQTT协议接入OneNET平台的完整AT指令流程。从平台侧的产品创建、设备添加,到核心难点连接密钥的计算方法,再到模组侧的基础网络附着、MQTT连接配置、数据收发及调试排错,提供了手把手的实战指南,帮助开发者快速实现物联网设备上云。

weixin_29240711的博客 495

Hibernate联合主键

在实际开发中,数据库表之间关系有很多种情况,其中共有一个是联合主键,就是中由两个以上的属性同时担任主键, 今天我们就来学习一下,联合主键怎么设计实体类,以及怎么写实体类对应的配置文件*.hbm.xml, 新建一个项目名称为:06hibernate_composite_id,结构如下: 项目以分数实体类为例, 导入jar包,参见《Hibernate环境搭建和配置》

红桃峰峰 的博客 1306

基于深度学习的UWB门禁检测

针对基于UWB技术智能门禁管理系统,由于测距误差或非视距原因导致门禁产生不合理动作的现象。分析如何采用基于深度学习的方法,通过对TWR测距数据、TWR监听数据、到达角度差(PDOA)、信道脉冲响应(CIR)等数据维度进行深度学习,利用 TensorFlow建立相应的推导模型,对卡片姿态进行更加精准可靠的检测,从而更好完成闸机开合控制。

tenth_quadrant的博客 2027

STM32与SD卡SPI接口硬件设计:从原理图到调试的完整指南

SPI(串行外设接口)作为一种广泛应用的同步串行通信协议,以其接线简单、驱动成熟的特点,成为连接微控制器与各类外设的经典方案。其工作原理基于主从架构,通过时钟、数据线和片选信号实现全双工通信,在嵌入式系统中具有极高的技术价值,常用于连接传感器、存储设备和显示模块等。在数据存储场景中,SD卡凭借其大容量和便携性成为首选,而通过SPI模式驱动SD卡,则平衡了性能与设计复杂度。本文聚焦于使用Altium Designer进行硬件设计的工程实践,详细解析了STM32微控制器与SD卡通过SPI通信时,电源管理、上拉电

weixin_34101784的博客 555

Hibernate联合主键详解

Hibernate联合主键映射  1. 实现方式一:将复合主键对应的属性与实体其他普通属性放在一起  2. 实现方式二:将主键属性提取到一个主键类中,实体类只需包含主键类的一个引用  联合主键的映射规则 1) 类中的每个主键属性都对应到数据表中的每个主键列。 Hibernate要求具有联合主键的实体类实现Serializable接口

wuseyukui的专栏 2106

光栅衍射有入射角时_衍射型多焦点人工晶体光学原理

多焦点人工晶体如何把光线分成多个焦点的?这个问题大部分专业书只是蜻蜓点水,并没有讲明白。希此文粗浅的解释,能帮您加深理解,请多指正。接下来,我将按照一下历史发展的顺序讲解一下:光的认识、菲涅尔灯塔(菲涅尔透镜)、菲涅尔波带盘(半波带盘)、多焦点人工晶体。一:首先复习一下光的认识历史。我们现在都知道光是一种电磁波,具有波粒二相性,但是认识光的本质也经历非常曲折漫长的过程。牛顿时代的几何光...

weixin_28963467的博客 2352

hibernate的联合主键

hibernate的联合主键探究

u011526599的专栏 899

Qt 调用YOLO模型(代码)

本文介绍了如何在 Qt C++ 环境中集成 YOLO 模型进行目标检测,包括模型封装、界面设计和实时处理等关键步骤。通过这种方法,你可以快速开发出具有目标检测功能的 Qt 应用程序,应用于监控系统、机器人视觉、图像分析等多个领域。

轩宇的博客 260

复现论文《大规模风电场电磁暂态高效建模仿真方法》

本文提出了一种针对大规模风电场电磁暂态(EMT)仿真的高效建模方法。通过三种关键技术实现仿真加速:(1)永磁直驱风电机组一体化等效建模,采用节点导纳矩阵降维将25节点机组简化为4端子电路,仿真速度提升1-3个数量级;(2)基于戴维南/诺顿等效和OpenMP并行计算的风电场整体建模,通过串并联叠加实现节点收缩,30台机组仿真加速近万倍;(3)受控源映射解耦方法提高故障仿真灵活性。复现代码展示了核心算法实现,包括导纳矩阵Schur补降维、多进程并行计算框架以及受控源解耦方法。

huanghm88的专栏 279

Hiberante学习之复合主键的映射

当数据库中两个表(表A和表B)存在多对多的关系时,一般会再设一个中间表(表C),和表A、B形成多对一的关系;而这个中间表C由多个主键组成复合主键,这些主键都是表A、B的外键。复合主键的映射和一般字段的映射有点不同,一般是以下两种方法:方法一:映射代码            key-property name="name" column="name" type="java.lang.String"/

CenturyMagus的专栏 1558

【异常】Cursor编辑器 “Taking longer than expected...“ 报错全链路排查与解决方案

该提示并非传统的程序崩溃或语法报错,本质是Cursor编辑器的超时预警机制——当核心任务(云端AI推理请求、本地项目索引等)的执行耗时超出系统预设阈值时,触发的用户告知类提示,核心诱因是任务执行全链路出现阻塞或性能瓶颈。以下方案按排查优先级从高到低排序,覆盖从快速急救到根因根治的全流程,可按步骤逐步验证解决。针对大仓库、多依赖项目的索引超时问题,核心是通过规则过滤无效文件,从根源降低索引负载。

奶爸的编程之路,也就一周冷个三天 3106

[转]hiberante中使用复合主键

  hiberante中使用复合主键 对于新系统的设计开发而言,我们应尽量避免在库表中引入与业务逻辑相关的主键关系。将业务逻辑主键引入库表,以后业务逻辑的变化,将很可能对底层数据库结构产生连带影响。复合主键的引入,很大程度上意味着业务逻辑已经侵入到数据存储逻辑之中。因此,应尽量避免。但实际情况中,我们必须面对遗留系统的旧表开发,这时,对现有复合主键的支持就非常必要。 hibernate中,通...

从新开始 141

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

VC中sqlite的使用

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

Hiberante学习之复合主键的映射(转)

当数据库中两个表(表A和表B)存在多对多的关系时,一般会再设一个 中间表(表C),和表A、B形成多对一的关系;而这个中间表C由多个主键组成复合主键,这些主键都是表A、B的外键。 复合主键的映射和一般字段的映射由一定的不同,一般是...

cuankuangzhong6373的博客 145

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

hiberante复合主键+oscache 缓存无法命中问题

最近一个项目做压力测试的时候发现内存不断攀升,从jconsole观察感觉内存有泄漏问题。 安装jprofiler,跟踪内存对象的变化,发现 oscache中不断添加对象,估计和hiberante和oscache有关系,debug到代码内部,代码使用到了hibernate的复合主键,复合主键实现类没有覆盖掉toString方法,而hibernate的cache用到了这个方法,导致cache无法命中...

iteye_11723的博客 145

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

hibernate组件作为复合主键

hibernate组件作为复合主键 package com.xueyoucto.xueyou; import java.io.Serializable; /** * Created by Administrator on 2016/6/25. */ public class MulKey implements Serializable { private String firs

archer的技术故事 714
上一篇: /ewcm008.do?flag=findVendor" method="post">
下一篇: 只能输入数字
AngleKill
博客等级 码龄18年 20粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值