2017-10-26 3 views
0

私はHibernateの新機能で、コースをオンラインでやって自分自身を教えようとしています。Hibernate persistance

@WebServlet(urlPatterns = {"/"}, loadOnStartup = 1) 
public class MyServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 

private static final Logger logger = Logger.getLogger(RootServlet.class); 


@Override 
public void init() throws ServletException { 
    super.init(); 
    logger.info("init started"); 
    // Read the data from a file 
    String url = ReadProperties.readProperty("data"); 

    try { 
     InputStream inputStream = new URL(url).openStream(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 

     StringBuffer buffer = new StringBuffer(); 
     String line = reader.readLine(); 
     while (line != null) { 
      buffer.append(line); 
      line = reader.readLine(); 
     } 

     logger.info("parsing data"); 
     JsonParser parser = new JsonFactory().createParser(buffer.toString()); 
     if (JsonToken.START_ARRAY != parser.nextToken()) { 
      throw new Exception("bad token"); 
     } 

     JsonToken token = parser.nextToken(); 
     while(token == JsonToken.START_OBJECT) { 

      Employee emp = new Employee(); 

      emp.setFName(parser.nextTextValue()); 
      emp.setLName(parser.nextTextValue()); 

      Session session = HibernateUtil.getSessionFactory().openSession(); 
      try { 
       session.beginTransaction(); 
       session.persist(e);   
       session.getTransaction().commit(); 
      } catch (ConstraintViolationException ex) { 

      } 
      session.close(); 

      token = parser.nextToken(); 

     } 

    } catch (Exception ex) { 
     throw new ServletException(ex); 
    }  
} 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    Session session = HibernateUtil.getSessionFactory().openSession(); 
    List<Employee> list = session.createCriteria(Employee.class).list(); 

    for (Employee e : list) { 
     response.getWriter().println("First Name " + entity.getFName()); 
     response.getWriter().println("Last Name " + e.getLName()); 
    } 

} 

}

にHibernate設定ファイル::私はいくつかの質問を持って、以下のコードを参照してください

<?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> 
    <property name="hibernate.archive.autodetection">class,hbm</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> 
    <property name="hibernate.show_sql">true</property> 
    <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property> 
    <property name="hibernate.connection.username">user</property> 
    <property name="hibernate.connection.password">pass</property> 
    <property name="hibernate.connection.url">jdbc:hsqldb:mem:db</property> 
    <property name="hibernate.hbm2ddl.auto">create</property> 
    <property name="hibernate.jdbc.batch_size">50</property> 
    <mapping class="com.waracle.cakemgr.beans.CakeEntity"></mapping>   
</session-factory> 

は、私は、データベースのセットアップを持っていないが、私は持っています与えられたダミー値を休止状態の設定ファイルに入れますが、上記のコードは実行時にファイルから読み込み、データが永続的になっているように見え、doGetメソッドは従業員のリストも表示します。 これがなぜ機能しているのか分かりません。session.persistはエラーをスローしませんか?また、同じコードを持つ別のページを追加すると、そのページに移動すると、session.persistが無限に終了するのを待つことになります。

ご協力ありがとうございます。

答えて

0

インメモリデータベースを使用しているため、HSQLDBです。

<property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>は、物理データベースの代わりにメモリ内データベースを使用することを示します。

関連する問題