代码之家  ›  专栏  ›  技术社区  ›  AdrianS

Hibernate不会保存到数据库中

  •  2
  • AdrianS  · 技术社区  · 16 年前

    实体

    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>
    

    p-手动加载的Profesor对象

    Profesor p2 = (Profesor) session.merge(p);
    session.saveOrUpdate(p2);
    
    
    //flush session of course
    

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

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

    4 回复  |  直到 16 年前
        1
  •  3
  •   Barthelemy    16 年前

    正如在评论中提到的,我的猜测是您没有提交更改。你可以试试这样的方法:

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

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

        2
  •  3
  •   Poso Lingofe    15 年前

    将此代码段添加到hibernate配置中:

    <property name = "current_session_context_class">thread</property>

    使用以下代码:

    Session session = factory.getCurrentSession();
    Transaction tx = session.beginTransaction();
    
    Profesor p2 = (Profesor) session.merge(p);
    session.saveOrUpdate(p2);
    
    tx.commit();
    

        3
  •  0
  •   Pascal Thivent    16 年前

    确保在事务中运行代码(最后提交):

    Session session = factory.openSession();
    Transaction tx = session.beginTransaction();
    
    Profesor p2 = (Profesor) session.merge(p);
    session.saveOrUpdate(p2);
    
    tx.commit();
    session.close();
    
        4
  •  0
  •   Sebastien Lorber    16 年前

    如果它不能处理事务,那是因为事务是在mysql(innoDB引擎)上激活的,所以您只需在mysql服务器上提交或禁用事务。。。

    但不管怎样,保持交易不是个坏主意不是吗???