首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ManyToOne级联导致在母表中重复存在

ManyToOne级联导致在母表中重复存在
EN

Stack Overflow用户
提问于 2012-10-10 23:39:32
回答 1查看 70关注 0票数 0

我有两个实体:调查问卷和QuestionnaireTime。调查问卷的id是QuestionnaireTime中的外键。因此,我的QuestionnaireTime实体中的关系如下所示:

代码语言:javascript
复制
@JoinColumn(name = "questionnaireid", referencedColumnName = "id")
@ManyToOne(cascade = CascadeType.PERSIST)
private Questionnaire questionnaireid;

因此,我正在尝试为一个调查问卷添加多个QuestionnaireTime记录。如果我删除了关系中的CascadeType.PERSIST部分,我的持久化就没有完成。当我使用cascade时,我在主表调查问卷中得到了几条新记录,这不是我想要的。

例如,当我要为某个调查问卷添加三个QuestionnaireTime时,这三个记录将插入到我的QuestionnaireTime表中,但3+1记录也会添加到调查问卷中。

如果你需要更多的解释。这是我的托管bean,我正尝试在一个调查问卷中添加多个QuestionnaireTime记录: NB - current是我的调查问卷对象

代码语言:javascript
复制
else if (current.getType().equals("frequent")) {
                int iteration = 1;
                currentQuestionnaireTime = new QuestionnaireTime();
                if (!selectDateList.isEmpty()) {
                    for (String insertedDate : selectDateList) {                    
                        currentQuestionnaireTime.setId(0);
                        currentQuestionnaireTime.setQuestionnaireid(current);
                        getEjbQuestionnaireTimeFacade().create(currentQuestionnaireTime);
                        iteration++;
                    }
                }
            }
            try {
                getFacade().create(current); // my Questionnaire facade
            } catch (EJBException ejbe) {
                ejbe.getCause();
            }
EN

回答 1

Stack Overflow用户

发布于 2012-10-11 20:59:05

有几件事

questionnaireid这是一个非常糟糕的字段名称,问卷应该是有意义的。

currentQuestionnaireTime.setId(0);-您不应更改现有对象的id,而应创建一个新对象

getEjbQuestionnaireTimeFacade().create() -这是做什么的?如果需要对current的引用,则应首先持久化current。如果你是EJB远程的?如果是,则将其设为本地,或者确保使用merge()而不是persist(),因为您的新对象具有对分离对象的引用。或者在当前持久性上下文中查找引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12823211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档