我有两个实体:问卷调查和问卷调查。问卷调查的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();
}
答案 0 :(得分:0)
一些事情,
问卷调查 - 这是一个非常糟糕的字段名称,问卷调查是有意义的。currentQuestionnaireTime.setId(0); - 您不应该更改现有对象的ID,而是创建新对象
getEjbQuestionnaireTimeFacade()。create() - 这是做什么的?如果需要对当前的引用,则应首先保持当前的电流。如果你是EJB远程?如果是,则将其设置为本地,或者确保使用merge()not persist(),因为新对象具有对分离对象的引用。或者在当前持久化上下文中找到引用。