0

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

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

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

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

如果您需要更多解释。这是我的托管 bean,我试图在一个问卷中添加多个 QuestionnaireTime 记录的部分:NB - current is my Questionnaire object

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

1 回答 1

0

一些东西,

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

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

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

于 2012-10-11T12:59:05.113 回答