私は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が無限に終了するのを待つことになります。
ご協力ありがとうございます。