2017-10-26 7 views
0

나는 매우 Hibernate에 익숙하며, 코스를 온라인으로해서 스스로를 가르치려고 노력하고있다.최대 절전 모드 지속성

@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()); 
    } 

} 

}

최대 절전 모드 설정 파일 : 나는 몇 가지 질문을 가지고, 아래의 코드를 참조하십시오

<?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> 

내가 데이터베이스 설치를 필요는 없습니다, 그냥이 hibernate 설정 파일에서 주어진 더미 값을 반환하지만, 위의 코드를 실행하면 파일에서 읽습니다. 데이터가 영구적 인 것처럼 보이고 doGet 메서드는 직원 목록도 표시합니다. 이것이 왜 작동하는지 이해할 수 없으며 session.persist가 오류를 발생시키지 않습니까? 또한 동일한 코드가있는 다른 페이지를 추가하면이 페이지로 이동하면 session.persist가 끝날 때까지 기다릴 수 있습니다.

감사합니다.

답변

0

인 메모리 데이터베이스를 사용하고 있으므로 : HSQLDB.

<property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>은 물리적 데이터베이스 대신 메모리 내장 데이터베이스를 사용함을 나타냅니다.