Hibernate:插入问题 - 未找到父键

vik*_*rma 2 hibernate

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

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)}
Run Code Online (Sandbox Code Playgroud)

这是我的映射:

@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;
Run Code Online (Sandbox Code Playgroud)

我得到的例外说:

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
Run Code Online (Sandbox Code Playgroud)

这是我的插入代码:

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);
Run Code Online (Sandbox Code Playgroud)

有人可以看看我的映射并告诉我我做错了什么.请帮帮我.我对休眠非常新.如果需要更多信息来跟踪问题,请告知我们.

更新------------------------------------------------- ------------------------------------我尝试过建立关系多对多和双向关系

//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;
Run Code Online (Sandbox Code Playgroud)

但仍然遇到同样的问题.

vik*_*rma 5

我找到了我面临的问题的根本原因.

User表上有一个触发器,它在每次插入后更新User序列.我想那是造成这个问题的原因.我可以看到,在禁用触发器后,我能够正确保存用户实体而不会出现任何问题.

谢谢大家的时间.