我有两个表,它们是 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/