休眠:插入问题 - 父键找不到 [英] Hibernate: Insert issue - Parent Key not found

查看:110
本文介绍了休眠:插入问题 - 父键找不到的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正面临将实体插入数据库的问题。我正在使用Hibernate JPA。
这里是我的数据库结构:

$ p $ Table:User {CGU_USER_ID as PK}
Table:Industries { CGI_INDUSTRY_ID(PK),CGI_INDUSTRY_NAME}
表:USER_INDUSTRY_MAP {CUIM_USER_ID(FK),CUIM_INDUSTRY_ID(FK)}

这是我的映射:

  @JoinTable(name =USER_INDUSTRY_MAP,joinColumns = @JoinColumn(name = CUIM_USER_ID,referencedColumnName =CGU_USER_ID),inverseJoinColumns = @JoinColumn(name =CUIM_INDUSTRY_ID))
@OneToMany(cascade = {CascadeType.MERGE,CascadeType.REMOVE},fetch = FetchType.EAGER)
私人清单<行业> industrySet;

我得到的异常说:

  org.springframework.dao.DataIntegrityViolationException:无法插入集合:[com.keff.gg.domain.User.industrySet#1242]; SQL [insert into CG_USER_INDUSTRY_MAP(CUIM_USER_ID,CUIM_INDUSTRY_ID)values(?,?)];约束[CUSTOMERGATEWAY.FK_CUIM_USER_ID];嵌套异常是org.hibernate.exception.ConstraintViolationException:无法插入集合:[com.keff.gg.domain.User.industrySet#1242] 

引起:java.sql.SQLException:ORA- 02291:违反了完整性约束(CUSTOMERPROJECT.FK_CUIM_USER_ID) - 未找到父键

以下是我的插入代码:

  User user = new User(); 
query = session.createQuery(from Industry industry where industry.industryName =:industryName);
query.setParameter(industryName,validIndstry);
results =(List<>)query.list();
if(results!= null&& result.size()> 0){
industryList =(List< Industry>)results;
}
user.setIndustrySet(industryList); //如果设置为null,则插入到用户表中的是成功
Long id =(Long)hibernateTemplate.save(user);

有人可以查看我的映射并告诉我我做错了什么。
请帮助我。我对休眠非常陌生。请让我知道是否需要更多信息来追踪此问题。



更新-------------------- -------------------------------------------------- ---------------
我已经尝试使关系多对多和双向

  // User Class 
@JoinTable(name =CG_USER_INDUSTRY_MAP,joinColumns = @JoinColumn(name =CUIM_USER_ID,referencedColumnName =CGU_USER_ID),inverseJoinColumns = @JoinColumn(name =CUIM_INDUSTRY_ID) )
@ManyToMany(cascade = {CascadeType.MERGE,CascadeType.REMOVE},fetch = FetchType.EAGER)
private List< Industry> industrySet;
$ b $ //行业分类
@ManyToMany(fetch = FetchType.LAZY,mappedBy =industrySet)
private List< User> USERSET;

但仍然遇到同样的问题。

解决方案

我发现了我面临的问题的根源。



用户表中有一个触发器,每次插入后都会更新用户序列。
我想这是造成这个问题。我可以看到,禁用触发器后,我可以正确保存用户实体,而不会有任何问题。



谢谢大家。

I am facing issue inserting an entity into database. I am using Hibernate JPA. Here is my database structure :

Table : User {CGU_USER_ID as PK}
Table : Industries {CGI_INDUSTRY_ID (PK),CGI_INDUSTRY_NAME}
Table : USER_INDUSTRY_MAP {CUIM_USER_ID (FK),CUIM_INDUSTRY_ID (FK)}

Here is my Mapping :

@JoinTable(name = "USER_INDUSTRY_MAP", joinColumns = @JoinColumn(name = "CUIM_USER_ID", referencedColumnName = "CGU_USER_ID"), inverseJoinColumns = @JoinColumn(name = "CUIM_INDUSTRY_ID"))
@OneToMany(cascade = { CascadeType.MERGE, CascadeType.REMOVE }, fetch = FetchType.EAGER)
private List<Industry> industrySet;

The Exception i am getting says :

org.springframework.dao.DataIntegrityViolationException: could not insert collection: [com.keff.gg.domain.User.industrySet#1242]; SQL [insert into CG_USER_INDUSTRY_MAP (CUIM_USER_ID, CUIM_INDUSTRY_ID) values (?, ?)]; constraint [CUSTOMERGATEWAY.FK_CUIM_USER_ID]; nested exception is org.hibernate.exception.ConstraintViolationException: could not insert collection: [com.keff.gg.domain.User.industrySet#1242]

Caused by: java.sql.SQLException: ORA-02291: integrity constraint (CUSTOMERPROJECT.FK_CUIM_USER_ID) violated - parent key not found

Here is my insert code:

User user = new User();
query = session.createQuery("from Industry industry where industry.industryName=:industryName");
        query.setParameter("industryName", "validIndstry");
        results = (List<?>) query.list();
        if(results != null && results.size()>0){
            industryList = (List<Industry>)results;
        }
user.setIndustrySet(industryList); // If this is set to null then insert into User table is successfull
Long id = (Long) hibernateTemplate.save(user);

Can somebody look at my mappings and tell me what i am doing wrong. Please help me out. I am very very new to hibernate. Please let me know if more information is required to trace the issue.

UPDATE ------------------------------------------------------------------------------------- I have tried Making the relationship Many to many and bidirectional

//User Class
@JoinTable(name = "CG_USER_INDUSTRY_MAP", joinColumns = @JoinColumn(name = "CUIM_USER_ID", referencedColumnName = "CGU_USER_ID"), inverseJoinColumns = @JoinColumn(name = "CUIM_INDUSTRY_ID"))
@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.REMOVE }, fetch = FetchType.EAGER)
private List<Industry> industrySet;

//Industry Class
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "industrySet")
private List<User> userSet;

But still getting the same issue.

解决方案

I found out the root cause of the issue i was facing.

There was a trigger on the User table that was updating the User sequence after each insert. I guess that was causing the issue. I can see that after disabling the trigger I am able to save the User entity correctly without any issues.

Thank you all for your time.

这篇关于休眠:插入问题 - 父键找不到的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆