mysql - @oneToMany 和@JoinTable 在 jpa 中有唯一约束吗?

标签 mysql oracle hibernate jpa jpa-annotations

我有两个表,它们是 USER 实体有

@OneToMany
@JoinTable(name="user_roles")
private List<Role> roles;

角色实体有用户

@ManyToOne
private User user;

表 user_role 的描述是

Name                     Null     
USER_RECORD_ID  NOT NULL NUMBER(19) 
ROLE_RECORD_ID NOT NULL NUMBER(19)  

注意:一个用户可以有多个角色,我已经通过脚本创建了角色,有Id:10001,10002,10003等

在 user_role 角色表中,我插入一个具有所有角色的用户 800001,因此该表看起来像

USER_RECORD_ID  ROLE_RECORD_ID
800001          10001
800001          10002
800001          10003
800002          10001   ///This record will through me unique constraint error

因此,如果我尝试为预定义角色的新用户赋予角色,则会出现此错误

INSERT INTO USER_ROLE(USER_RECORD_ID,ROLE_RECORD_ID) VALUES(800002,10001)

错误报告 - SQL 错误:ORA-00001:违反唯一约束 (SYSTEM.UK_LPLHY51JOJA1LP4465QK2E0AF) 00001.00000 - “违反了唯一约束 (%s.%s)” *原因:UPDATE 或 INSERT 语句试图插入重复键。 对于在 DBMS MAC 模式下配置的 Trusted Oracle,您可能会看到 如果在不同级别存在重复条目,则显示此消息。 *行动:要么删除唯一限制,要么不插入 key 。

最佳答案

我认为错误是由于使用 @ManyToOne/@OneToMany 而你的关系是 @ManyToMany 引起的。之所以如此,是因为在示例中,您为 USER_RECORD_ID 提供的值为 800001 具有多个 ROLE_RECORD_ID 并且 ROLE_RECORD_ID 具有值 10001 有多个 USER_RECORD_ID

因此请尝试使用 @ManyToMany,这应该可以解决您的问题。 这是一个引用,以备不时之需:https://en.wikibooks.org/wiki/Java_Persistence/ManyToMany

关于mysql - @oneToMany 和@JoinTable 在 jpa 中有唯一约束吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38436176/

相关文章:

java - 将 hyperjaxb3 升级到 jpa 2.1

java - 无法找到逻辑名称为 @embeddedid 的列

mysql - 从现有数据库创建 EER 模型但已完成关系 - Workbench

mysql查询从2个表中选择*值并返回结果存在的表的名称?

java - 如何在 Java 中插入 Oracle 日期数据类型

sql - Oracle SQL如何获取按列分组以及其他选定的列

php - 如何使用 Doctrine 在死锁后重试事务?

mysql - MySQL中的两个select错误 “Every derived table must have its own alias”?

sql - 将日期格式化为单词

java - 如何使用 hibernate 透明地连接到不同的数据库(开发/测试/生产)