0

如果是重复的,我很抱歉。我找不到我的问题的答案。

我刚开始休眠。我有一个问题是每次程序自动删除旧的 shceme 并在运行时创建新的。例如,如果我想将记录添加到数据库中,我无法做到,因为方案将被重新创建,因此历史记录将被删除。

这是我的hbm.xml映射文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 22-Oct-2013 1:39:31 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="net.ys.hibernate.Equip" table="EQUIP">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="dis" type="java.lang.String" column="dis" />

        <property name="ref" type="java.lang.String" column="ref" />

        <property name="type" type="java.lang.String" column="type" />

    </class>
</hibernate-mapping>

hibernate.cfg.xml 配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>

        <!-- hibernate dialect -->

        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">pw</property>

        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/explorer_DB?useUnicode=true&amp;characterEncoding=GBK</property>
        <property name="hibernate.connection.username">username</property>
        <property name="hibernate.default_schema">explorer_DB</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Automatic schema creation(begin) -->
        <property name="hibernate.hbm2ddl.auto">create</property>
        <!-- Simple memory-only cache -->
        <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- mapping files with external dependencies -->
        <mapping resource="net/ys/hibernate/Equip.hbm.xml"/>


    </session-factory>
</hibernate-configuration>

和 addEquip 方法:

public Integer addEquip(String dis, String ref, String type){
        Session session = sessionFactory.openSession();
        currentSession = sessionFactory.getCurrentSession();
        Transaction tx = null;
        Integer equipID = null;

        try {
            tx = currentSession.beginTransaction(); //start a transaction

            Equip equip = new Equip(dis,ref,type);
            equipID = (Integer)currentSession.save(equip);
            tx.commit();
        } catch (HibernateException e) {
            if(tx!=null) tx.rollback();
            e.printStackTrace();
        } finally {
            session.close();
        }

        return equipID;

    }
}

有人可以帮我解决这个问题吗?我只是不明白如何使用 getCurrentSession(),在这一点上我可能错了。你能解释一下当我们为我调用 getCurrentSession() 时休眠是如何工作的吗?对此,我真的非常感激。

非常感谢

4

1 回答 1

1

hibernate.cfg.xml在文件中更改此属性

当前配置

   <property name="hibernate.hbm2ddl.auto">create</property>

   <property name="hibernate.hbm2ddl.auto">none</property>

如果数据库使用不需要更改。

<property name="hibernate.hbm2ddl.auto">validate</property>

有关此的更多信息,请参阅此链接

Hibernate hbm2ddl.auto 可能的值以及它们的作用?

于 2013-10-23T16:05:51.797 回答