ManyToOne Cascade导致母亲表中反复出现

时间:2012-10-10 15:39:32

标签: java jpa ejb

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

@JoinColumn(name = "questionnaireid", referencedColumnName = "id")
@ManyToOne(cascade = CascadeType.PERSIST)
private Questionnaire questionnaireid;

所以我要做的是为一份调查问卷添加多个QuestionnaireTime记录。如果我删除了我的关系中的CascadeType.PERSIST部分,我的持久性就没有完成。当我使用级联时,我在主表调查表中得到了几条新记录,这不是我想要的。

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

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

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();
            }

1 个答案:

答案 0 :(得分:0)

一些事情,

问卷调查 - 这是一个非常糟糕的字段名称,问卷调查是有意义的。

currentQuestionnaireTime.setId(0); - 您不应该更改现有对象的ID,而是创建新对象

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