나는 매우 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가 끝날 때까지 기다릴 수 있습니다.
감사합니다.