【发布时间】:2016-10-08 17:37:24
【问题描述】:
在我的用户对象中,我有以下联接表:
@JsonIgnore
@ManyToMany
@JoinTable(
name = "JHI_USER_AUTHORITY",
joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name")})
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Authority> authorities = new HashSet<>();
我在用户对象上也有一个触发器,可以在创建行时插入主 ID
TRIGGER TRG_JHI_USER_ID
BEFORE INSERT
ON JHI_USER
FOR EACH ROW
DECLARE
BEGIN
SELECT SEQ_USER.NEXTVAL INTO :NEW.ID FROM DUAL;
END TRG_JHI_USER_ID;
现在,当我创建用户时,出现以下异常:
Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-02291: integrity constraint (PORTALUSER.FK_USER_ID) violated - parent key not found
似乎在尝试持久化 User 对象时,它也会在执行触发器之前持久化我的多对多表,但如果理解正确,则找不到 user_id。如何在不挖掘复杂解决方案的情况下解决这个问题?
这发生在 Oracle 11 中。
这是模型:
【问题讨论】:
-
“portaluser”是所有者,如“PORTALUSER”。“JHI_USER_AUTHORITY”。
-
我已经在描述中添加了模型
-
对不起,我对
portaluser是什么感到困惑。不过,触发因素不是问题。不知何故,jhi_user_authority行被插入 之前 父jhi_user行。你对此有控制权吗?你确定插入了jhi_user行吗? -
我的控制器填充了一个新的用户对象,并使用 JPA 存储库来保存应该保留引用的多对多对象的用户。模型有帮助吗?
-
如果我理解正确,
jhi_user和jhi_user_authority行都由相同的代码/事务持久化?如果是这样,我不清楚您要插入什么jhi_user_authority.user_id值以及它如何可能是正确的。因为JHI_USER的ID值是由插入触发器设置的,所以您的代码如何知道该值是什么,以便在插入jhi_user_authority行期间正确设置它?
标签: sql jpa oracle11g spring-data jhipster