我很难在hibernate对象的工作方式中绕过头。这是我的模型的一小部分:
JobOpening:
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(
name="jobOpening_questionSet",
joinColumns=@JoinColumn(name="jobOpenings_id"),
inverseJoinColumns=@JoinColumn(name="questionSets_id")
)
@IndexColumn(name="question_sets_idx",base=0,nullable=false)
public List<QuestionSet> getQuestionSets() {
return questionSets;
}
QuestionSet:
@ManyToMany(mappedBy="questionSets",fetch=FetchType.EAGER)
public Set<JobOpening> getJobOpenings() {
return jobOpenings;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@IndexColumn(name="questions_idx",base=0)
@JoinColumn(name="questionset_id",nullable=false)
public List<FormQuestion> getQuestions() {
return questions;
}
FormQuestion:
@ManyToOne
@JoinColumn(name="questionset_id", insertable=false, updatable=false, nullable=false)
@OnDelete(action=OnDeleteAction.CASCADE)
public QuestionSet getQuestionSet() {
return questionSet;
}
现在,我将如何修改问题集中的问题,或更改与问题集相关联的作业?例如,要编辑问题集中的问题,我想我应该能够通过其id获取问题,更改一些值,并将其重新合并(),但这不起作用。
我正在使用Spring(appfuse)中的Hibernate,通常作为分离的对象。
答案 0 :(得分:0)
hibernate会话的工作方式略有不同:
SessionFactory
创建Session
。通常会为每个线程创建一个新的Session
。这在Web上下文中称为每个请求的会话。Hibernate对象(实体)有三种状态 - 持久性,分离和瞬态:
不需要合并,更新持久对象或任何东西 - 每当你改变它们的内部状态时,hibernate就已经知道了,并且它会在下一个flush()
hashCode()
and equals()
with a business key.