Java hibernate假外键_java – Hibernate:外键的列数错误
我已经定义了我的两个实体类User和Permission之间的多对多关系.用户具有username和countyId的主键组合,我的Permission表具有常规整数Id.表UserPermission具有三个外键作为其主键:username,countyId和permissionId.
由于这是一个遗留数据库,我将无法使用Right Thing(™)并在User上创建一个整数主键.
我在User.class中定义了这样的多对多关系:
@ManyToMany(targetEntity=Permission.class,cascade={ CascadeType.PERSIST,CascadeType.MERGE } )
@JoinTable(name="tblUserPermission",joinColumns = { @JoinColumn(name="username"),@JoinColumn(name="countyId") },inverseJoinColumns = { @JoinColumn(name="permissionId") })
private Collection
Permission.class说:
@ManyToMany( cascade = {CascadeType.PERSIST,CascadeType.MERGE},mappedBy = "permissions",targetEntity = User.class )
private Collection
我认为这是要走的路,但是当我启动使用Hibernate 3的Spring上下文时,我得到:
Caused by: org.hibernate.AnnotationException: A Foreign key refering com.mydomain.data.entities.User from com.mydomain.data.entities.Permission has the wrong number of column. should be 1
我在注释中做错了什么?应该是2,而不是1.
更新:
Arthur建议我添加referencedColumnName,但这给了我一个新的异常:
Caused by: org.hibernate.AnnotationException: referencedColumnNames(username,countyId) of com.mydomain.data.entities.Permission.permissions referencing com.mydomain.data.entities.User not mapped to a single property
根据他的要求,请遵循以下代码:
Permission.Class:
package com.mydomain.data.entities;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.ForeignKey;
@Entity
@Table(name = "tblPermission")
public class Permission extends PublishableEntityImpl implements Serializable,Cloneable {
private static final long serialVersionUID = 7155322069731920447L;
@Id
@Column(name = "PermissionId",length = 8,nullable = false)
private String PermissionId = "";
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "CountyId",nullable = false)
@ForeignKey(name="FK_CountyID")
private County county;
@Column(name = "Permission",nullable = true)
private Integer permission = 1;
@ManyToMany( cascade = {CascadeType.PERSIST,mappedBy = "Permissions",targetEntity = Item.class )
private Collection
和User.class
package com.mydomain.data.entities;
import java.util.*;
import java.io.Serializable;
import javax.persistence.*;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.IndexColumn;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
import org.springframework.security.core.userdetails.UserDetails;
@Entity
@Table(name = "tblUser")
public class User extends PublishableEntityImpl implements Serializable,Cloneable {
@Id
@Column(name = "CountyId",nullable = false)
private Integer countyId;
@Id
@Column(name = "Username",length = 25,nullable = false)
private String username;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "CountyId",nullable = false,insertable=false,updatable=false)
@ForeignKey(name="FK_CountyID")
private County county;
@Column(name = "Name",length = 50,nullable = true)
private String name;
@Column(name = "Password",length = 30,nullable = true)
private String password;
@Column(name = "Role",nullable = false)
private Integer role;
@ManyToMany(targetEntity=Permission.class,CascadeType.MERGE } )
@JoinTable(name="tblUserPermission",joinColumns = { @JoinColumn(name="Username",referencedColumnName="Username"),@JoinColumn(name="CountyId",referencedColumnName="CountyId") },inverseJoinColumns = { @JoinColumn(name="PermissionId",referencedColumnName="PermissionId") })
private Collection
干杯
聂
Java hibernate假外键_java – Hibernate:外键的列数错误相关推荐
- Java hibernate假外键_java – Hibernate:没有实体类的外键,只能通过id
我有一个分层实体,它将自己引用为父母.我只需要通过id进行映射,而不是通过实体实例进行映射(原因太复杂,无法解释).所以我这样定义了实体: class Item { @Id private Strin ...
- java nio 堆外内存_Java堆外内存之突破JVM枷锁
对于有Java开发经验的朋友都知道,Java中不需要手动的申请和释放内存,JVM会自动进行垃圾回收:而使用的内存是由JVM控制的. 那么,什么时机会进行垃圾回收,如何避免过度频繁的垃圾回收?如果JVM ...
- java list 超出范围_java-列索引超出范围:2,列数1
我有这个表: 学生 CREATE TABLE IF NOT EXISTS Klas_student( Student varchar(7) REFERENCES studenten (Studente ...
- java 进程假死原因_Java进程假死案例集合
1. 案例1 今天通过域名调一个接口,10次中偶尔有1-2次请求失败,域名后绑定VIP,VIP后面为5台应用服务器. 1.1 范围缩小 直觉怀疑为某一台有有问题,于是单独的进行接口调用发现确实为其中一 ...
- java9 堆外内存_java堆外内存泄漏排查
当考虑Java中的内存泄漏时,我们通常会考虑Java堆泄漏,即在堆中分配的对象没有被垃圾收集.这是我在处理一台服务器内存泄漏时的想法,但我即将经历的远超出我的想象. 症状:运行Vertx应用程序(没有 ...
- java quartz 重启不了_java – 重新启动quartz调度程序而不会出现错误
上下文 我正在尝试使用jdbc在集群模式下使用quartz调度程序. 问题 在我开始使用集群模式的jdbc之前,我刚刚通过RAM存储测试了调度程序.这没有问题,我能够重启调度程序(主类),没有任何错误 ...
- java 不是封闭类_java – 不是一个封闭的类错误Android Studio
我在 Android开发中是新的,并没有深入的Java知识.我长时间困扰着一个问题.我试图在按钮点击上打开一个新的活动.但是我收到一个错误:错误:不是封闭类:Katra_home. 这是MainAct ...
- java 背景图片被覆盖_Java中涉及背景图片的怪异错误
我的问题是,当我运行程序时,我得到的是白屏和较早版本的文本,而不是应该显示的背景图像.我已经删除了与该版本关联的所有代码. 我四处寻找帮助,我所看到的所有线程都说要编写代码来进行设置.我什至不知道显示 ...
- java怎么定义字符长度_java – 当字符串长度超过列长度定义时,如何以静默方式截断字符串?...
我有一个Web应用程序,使用EclipseLink和MySQL存储数据. 其中一些数据是字符串,即DB中的varchars. 在实体代码中,字符串具有如下属性: @Column(name = &quo ...
最新文章
- Lua生成Guid(uuid)
- Linux C 获取本地 ip mac 域名对应 ip
- 深度网络pre-train对于深度网络的意义
- AbstractBeanFactory 的getBean()方法调用FactoryBean
- 数据库-null值处理及元数据
- Jenkins Ci系列目录
- 打造工业级推荐系统(三):推荐系统的工程实现与架构优化
- 形式化验证工具TLA+:程序员视角的入门之道
- Spring AOP注解
- 推荐两款Docker可视化工具
- spark RDD transformation与action函数整理
- 苹果手机回收价格怎么查询
- 为什么说千万别用微软 IE 下载 Chrome?
- TGRS2022/云检测:Unsupervised Domain Adaptation for Cloud Detection Based on Grouped Features Alignment
- BUCTOJ邀请赛20180814-D: String
- mybatisplus--getOne和逻辑删除问题详解
- CTF之crpto练习三
- 关于虚拟机及dockers
- 吵架公约,我不在担心婚后。
- 计算机图形学(二)输出图元_6_OpenGL曲线函数_5_其他曲线
热门文章
- P2212 [USACO14MAR]Watering the Fields S(最小生成树)
- 小程序【笔记001】框架和配置文件
- 在Mac电脑上用VMware Fusion在移动硬盘上安装Windows7虚拟机
- python axes_python matplotlib中axes与axis的区别?
- vue获取编辑器纯文字_前端富文本编辑器 vue-html5-editor
- qbytearray初始化全0_【小白学PyTorch】4.构建模型三要素与权重初始化
- k8s容器内的东西复制出来_容器 | Docker 如此之好,你为什么还要用k8s
- nginx哪个版本性能好_骁龙750g和天玑1000+哪个好-参数性能对比
- 荣耀30会不会升级鸿蒙,荣耀手机不能升级鸿蒙吗?有博主给出升级名单
- 双稳态继电器工作原理图_三招带你分清继电器与接触器