0

我很难理解休眠对象的工作方式。这是我的模型的一小部分:

职位空缺:

@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;
}

问题集:

@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;
}

表格问题:

@ManyToOne
@JoinColumn(name="questionset_id", insertable=false, updatable=false, nullable=false)
@OnDelete(action=OnDeleteAction.CASCADE)
public QuestionSet getQuestionSet() {
    return questionSet;
}

现在我将如何着手修改问题集中的问题,或者更改问题集中与哪些工作相关联?例如,要编辑问题集中的问题,我想我应该能够通过其 id 获取问题,更改一些值,然后将其合并(),但这不起作用。

我正在使用 Spring(appfuse)中的 Hibernate,通常作为分离的对象。

4

1 回答 1

0

休眠会话的工作方式略有不同:

  • 创建SessionFactory一个Session. 最常见的Session是为每个线程创建一个新线程。这在 web 上下文中称为 session-per-request。
  • Hibernate 对象(实体)具有三种状态——持久分离瞬态

    • 持久性意味着该对象最近已被当前活动的会话加载
    • 瞬态意味着该对象从未成为会话的一部分
    • detached 表示对象已经加载过会话,但是会话已经关闭(并且它没有与它关联的会话分离)
  • 持久对象不需要被合并、更新或任何东西——只要你改变它们的内部状态,hibernate 已经知道了,它会在下一个创建必要的查询flush()

  • 分离的对象需要重新合并到会话中,但它们的身份必须是可识别的——通过覆盖hashCode()equals()使用业务密钥。

查看会话和交易文档

于 2010-06-15T05:04:48.100 回答