gpt4 book ai didi

java - Hibernate 不会保存到数据库中

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:20 24 4
gpt4 key购买 nike

我在 Java 中使用 hibernate 将一些类映射到一些表,我将 Hibernate 设置为显示 SQL,它打开 session ,它显示它执行 SQL,它关闭 session 但没有对数据库进行任何修改。

实体

public class Profesor implements Comparable<Profesor> {
private int id;
private String nume;
private String prenume;
private int departament_id;
private Set<Disciplina> listaDiscipline; //the teacher gives some courses}

public class Disciplina implements Comparable<Disciplina>{ //the course class

private int id;
private String denumire;
private String syllabus;
private String schNotare;
private Set<Lectie> lectii;
private Set<Tema> listaTeme;
private Set<Grup> listaGrupuri; // the course gets teached/assigmened to some groups of students
private Set<Assignment> listAssignments;}

映射

<hibernate-mapping default-cascade="all">
<class name="model.Profesor" table="devgar_scoala.profesori">
<id name="id" column="id">
<generator class="increment"/>
</id>
<set name="listaDiscipline" table="devgar_scoala.`profesori-discipline`">
<key column="Profesori_id" />
<many-to-many class="model.Disciplina" column="Discipline_id" />
</set>
<property name="nume" column="Nume" type="string" />
<property name="prenume" column="Prenume" type="string" />
<property name="departament_id" column="Departamente_id" type="integer" />
</class>

<class name="model.Grup" table="devgar_scoala.grupe">
<id name="id" unsaved-value="0">
<generator class="increment"/>
</id>
<set name="listaStudenti" table="devgar_scoala.`studenti-grupe`">
<key column="Grupe_id" />
<many-to-many column="Studenti_nrMatricol" class="model.Student" />
</set>

<property name="nume" column="Grupa" type="string"/>
<property name="programStudiu" column="progStudii_id" type="integer" />
</class>
<class name="model.Disciplina" table="devgar_scoala.discipline" >
<id name="id" >
<generator class="increment"/>
</id>
<property name="denumire" column="Denumire" type="string"/>
<property name="syllabus" type="string" column="Syllabus"/>
<property name="schNotare" type="string" column="SchemaNotare"/>

<set name="listaGrupuri" table="devgar_scoala.`Discipline-Grupe`">
<key column="Discipline_id" />
<many-to-many column="Grupe_id" class="model.Grup" />
</set>

<set name="lectii" table="devgar_scoala.lectii">
<key column="Discipline_id" not-null="true"/>
<one-to-many class="model.Lectie" />
</set>
</class>

唯一“有趣”的是 Profesor 对象不是通过 Hibernate 加载的,而是通过手动经典 SQL Java 加载的。这就是为什么我这样保存 Profesor 对象的原因

p - 手动加载的 Profesor 对象

Profesor p2 = (Profesor) session.merge(p);
session.saveOrUpdate(p2);


//flush session of course

在此之后我进入 Java 控制台:

Hibernate: insert into devgar_scoala.grupe (Grupa, progStudii_id, id) values (?, ?, ?)

但是当我查看数据库时,Grupe 表(Groups 表)中没有新行

最佳答案

如评论中所述,我的猜测是您没有提交更改。你可以尝试这样的事情:

Transaction tx = null;
try {
tx = session.beginTransaction()
Profesor p2 = (Profesor) session.merge(p);
session.saveOrUpdate(p2);
tx.commit();
} catch(Exception e) {
tx.rollback();
}

您还可以在配置文件中使用自动提交模式来避免手动提交更改。在 Hibernate reference 中查找“hibernate.connection.autocommit”属性.不过,我认为并非所有数据库都(很好地)支持自动提交。

关于java - Hibernate 不会保存到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2577894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com