如果是重複的,我的道歉。我找不到我的問題的答案。如何停止自動計劃創建?
我剛開始Hibernate。每當程序自動刪除舊的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&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()時hibernate是如何工作的嗎?對此,我真的非常感激。
謝謝你這麼多
似乎每一次你創建會話工廠,你可以檢查嗎? – Admit
@Admit嗨Admit,在addEquip()中,首先打開openSession(),並獲取CurrentSession。之後,調用currentSession.beginTransaction()啓動一個事務。但是,更改創建 以解決問題。 –
Eric
如果你根本不需要模式創建(這相當於沒有值),你也可以刪除它。看看你創建'sessionFactory'的地方,因爲爲每個請求創建新工廠似乎效率不高,並且它似乎是問題的根源。 – Admit