Servus!
Ich habe eine frage über Hibernate, etwas Ich mache nicht gut... ich weisses nicht die probleme...
Ich habe 3 classes: Form.java / Question.java / Option.java
Die relationen ist : Form has many Questions / Questions has many Options ....und die code ist:
Code:
Form.java:
@OneToMany(mappedBy="form",cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Question> questions = new ArrayList<Question>();
Question.java
Code:
@ManyToOne (cascade = {CascadeType.PERSIST, CascadeType.MERGE})
public Form getForm() {
return form;
}
@OneToMany(mappedBy="question",cascade = CascadeType.ALL, fetch = FetchType.EAGER)
public List<OptionValue> getOptionValues() {
return optionValues;
}
Option.java
Code:
@ManyToOne
public Question getQuestion() {
return question;
}
Später wenn bin ich erfärung ein "Form" auf "Alte Form" Ich habe :
Object references an unsaved transient instance - save the transient instance before flushing: x.yyy.Question
Ich weißes nicht genau die probleme aber Ich denke die probleme is wenn ich möchte "save" ein Option vor Question...
Die code ist:
Code:
List questionsToAdd = formManager.getQuestionsById(new Long(idNewForm));
form.setQuestions(questionsToAdd);
//formManager.saveForm(form);
for(int i=0; i<questionsToAdd.size();i++){
Question questionOld = (Question) questionsToAdd.get(i);
Question questionNew = new Question();
questionNew.setLabel(questionOld.getLabel());
questionNew.setTypeQuestion(questionOld.getTypeQuestion());
questionNew.setPosition(questionOld.getPosition());
questionNew.setHasOptionsToAdd(questionOld.getHasOptionsToAdd());
questionNew.setQuestionText(questionOld.getQuestionText());
questionNew.setForm(form);
questionManager.saveQuestion(questionNew);
List optionsToAdd = questionOld.getOptionValues();
for(int j=0; j<optionsToAdd.size();j++){
OptionValue optionValueOld = (OptionValue) optionsToAdd.get(j);
OptionValue optionValueNew = new OptionValue();
optionValueNew.setValueOption(optionValueOld.getValueOption());
optionValueNew.setValue_column(optionValueOld.getValue_column());
optionValueNew.setValue_row(optionValueOld.getValue_row());
optionValueNew.setIsOptionColumn(optionValueOld.isIsOptionColumn());
optionValueNew.setIsOptionRow(optionValueOld.isIsOptionRow());
optionValueNew.setLabel(optionValueOld.getLabel());
optionValueNew.setImage(optionValueOld.getImage());
optionValueNew.setIsFieldOther(optionValueOld.isIsFieldOther());
optionValueNew.setValueFieldOther(optionValueOld.getValueFieldOther());
optionValueNew.setIsActive(optionValueOld.getIsActive());
optionValueNew.setType(optionValueOld.getType());
optionValueNew.setRangeBegin(optionValueOld.getRangeBegin());
optionValueNew.setRangeEnd(optionValueOld.getRangeEnd());
optionValueNew.setRangeStep(optionValueOld.getRangeStep());
optionValueNew.setQuestion(questionNew);
optionManager.saveOptionValue(optionValueNew);
}
}
Bitte ...Ich werde sehr glucklich sein ob jemmand kann hilf mir
Danke