java联合主键_Hibernate注解映射联合主键的三种主要方式
今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateSessionFactory' defined in class path resource [spring-config/ac-cif-srv-config.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: XXX
可以看出,其指出某一类是未指定标识符的实体,其主要原因是hibernate在进行扫描实体的时候,为发现其主键标识。所以就在其类上添加主键标识。因为我的这个类比较特殊,需要添加联合主键。
联合主键用Hibernate注解映射方式主要有三种:
一、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@Id
@Entity
@Table(name="Test01")public class Test01 implementsSerializable{private static final long serialVersionUID = 3524215936351012384L;privateString address ;private intage ;privateString email ;privateString phone ;
@IdprivateTestKey01 testKey ;
}
主键类:
@Embeddablepublic class Testkey01 implementsSerializable{private static final long serialVersionUID = -3304319243957837925L;private longid ;privateString name ;/***@returnthe id*/
public longgetId() {returnid;
}/***@paramid the id to set*/
public void setId(longid) {this.id =id;
}/***@returnthe name*/
publicString getName() {returnname;
}/***@paramname the name to set*/
public voidsetName(String name) {this.name =name;
}
@Overridepublic booleanequals(Object o) {if(o instanceofTestkey0101){
Testkey01 key=(TestKey01)o ;if(this.id == key.getId() && this.name.equals(key.getName())){return true;
}
}return false;
}
@Overridepublic inthashCode() {return this.name.hashCode();
}
}
二、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@EmbeddedId
@Entity
@Table(name="Test02")public classTest02 {privateString address ;private intage ;privateString email ;privateString phone ;
@EmbeddedIdprivateTestKey02 testKey ;
}
Testkey02为普通Java类即可。
三、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并要重写equals和hashcode.最后在主类中(该类包含联合主键类中的字段)将联合主键字段都注解为@Id,并在该类上方将上这样的注解:@IdClass(联合主键类.class)
@Entity
@Table(name="Test03")
@IdClass(TestKey03.class)public classTest03 {
@Idprivate longid ;
@IdprivateString name ;
}
Testkey03为普通Java类即可。
java联合主键_Hibernate注解映射联合主键的三种主要方式相关推荐
- 联合主键三种实现方式
联合主键可以通过Hibernate注解 进行映射,下面为大家展示三种实现方式: 一.方法一(本人喜欢使用这种方式,使用主键类字段时可以当做正常字段一样使用) 1.将联合主键的字段单独放在一个类中,该类 ...
- go map(映射)的概念、3种创建方式及map的CRUD操作
引入 [1]映射(map), Go语言中内置的一种类型,它将键值对相关联,我们可以通过键 key来获取对应的值 value. 类似其它语言的集合 [2]基本语法 var map变量名 map[keyt ...
- Java多线程的三种实现方式(重点看Collable接口实现方式)
1.通过继承Thread类来实现多线程 在继承Thread类之后,一定要重写类的run方法,在run方法中的就是线程执行体,在run方法中,直接使用this可以获取当前线程,直接调用getName() ...
- java如何实现定时任务_Java定时任务的三种实现方式
前言 现代的应用程序早已不是以前的那些由简单的增删改查拼凑而成的程序了,高复杂性早已是标配,而任务的定时调度与执行也是对程序的基本要求了. 很多业务需求的实现都离不开定时任务,例如,每月一号,移动将清 ...
- java servlet接口开发_servlet三种实现方式之一实现servlet接口
servlet有三种实现方式: 1.实现servlet接口 2.继承GenericServlet 3.通过继承HttpServlet开发servlet 第一种示例代码如下(已去掉包名): import ...
- java中map的遍历方法_Java中Map的三种遍历方式
集合中的三种遍历方式,如下代码: import java.util.Collection; import java.util.HashMap; import java.util.Iterator; i ...
- java源代码实例倒计时_Java倒计时三种实现方式代码实例
写完js倒计时,突然想用java实现倒计时,写了三种实现方式 一:设置时长的倒计时: 二:设置时间戳的倒计时: 三:使用java.util.Timer类实现的时间戳倒计时 代码如下: package ...
- java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...
java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...
- spring注解之@Import注解的三种使用方式
1.@Import注解须知 1.@Import只能用在类上 ,@Import通过快速导入的方式实现把实例加入spring的IOC容器中 2.加入IOC容器的方式有很多种,@Import注解就相对很牛皮 ...
最新文章
- Cornfox Bros.如何将手游移植到Switch
- 别看360完成私有化 仍有三因素阻碍中概股回归
- mysql not exists无效_分析MySQL中哪些情况下数据库索引会失效
- android 渐变圆形进度条_flutter好用的轮子推荐七-flutter圆形或线型进度条
- RTX5 | STM32H743+CubeMX+RTX5+两路FDCAN驱动+CANopen协议
- (转)HDOJ 4006 The kth great number(优先队列)
- 未知账户(S-1-5-21)无法删除的问题
- python 分词器比较
- 【pyTranscriber】开源免费语音转字幕软件及替代方案
- 机器学习(七)白化whitening
- 量化投资篇(1):深入浅出量化对冲Alpha基金的操作
- VM虚拟机安装Linux系统
- 全机房最蒟蒻的讲堂_第二期_论qwq和颜文字
- 三循环流水灯电路的原理
- 基于STM32F103单片机的智能婴儿床智能风扇系统
- 【Python】如何用pyth做游戏脚本(太简单了吧)
- 局域网win7计算机如何互访,局域网Win7与WinXP电脑不能互访怎么办?
- 服务器端程序的演进过程
- 政策频繁出台,智能网联汽车安全如何“驾驭”?
- 显示器测试软件 鲁大师,鲁大师怎么检测显示器 鲁大师有什么作用
热门文章
- 基于Irrlicht引擎的3D游戏实例v0.7
- 小幺鸡在线接口文档管理工具V2.1.7 Bug修复版本
- 【ceph的通用解决方案】-如何将ssd作为hdd的缓存池
- DSP音频Loundess响度控制算法
- Unity报错之【Tag provider attribute authorities has invalid character '$'.】
- 股票自动下单接口怎样写策略?
- 架构蓝图--软件架构的“4+1”视图模型
- Kotlin协程:协程的基础与使用
- android桌面图标摆放位置改变、将网址做成做成快捷键放在桌面上
- 阿里云双11的红包 不拼智商都不行