2012-06-16 50 views
0

指的這些教程: Tutorial 1休眠+ HSQDL初學者

Tutorial 2

這些都不是最新的。所以如果我修復一個錯誤,我會得到下一個錯誤。也許有人可以幫忙。

pom.xml,我有幾個看起來,但也許有一個圖書館還沒有最新或遺忘。

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

<modelVersion>4.0.0</modelVersion> 

<groupId>org.hibernate.tutorials</groupId> 
<artifactId>hibernate-tutorial</artifactId> 
<version>1.0.0-SNAPSHOT</version> 
<name>First Hibernate Tutorial</name> 

<build> 
    <!-- we dont want the version to be part of the generated war file name --> 
    <finalName>${project.artifactId}</finalName> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.1.3.Final</version> 
    </dependency> 

    <!-- Because this is a web app, we also have a dependency on the servlet api. --> 
    <dependency> 
     <groupId>org.apache.tomcat</groupId> 
<artifactId>servlet-api</artifactId> 
<version>6.0.35</version> 
    </dependency> 

    <!-- Hibernate uses slf4j for logging, for our purposes here use the simple backend --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-simple</artifactId> 
     <version>1.6.4</version> 
    </dependency> 

    <!-- Hibernate gives you a choice of bytecode providers between cglib and javassist --> 
    <dependency> 
     <groupId>javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.12.1.GA</version> 
    </dependency> 

    <!-- HSQLDB --> 
     <dependency> 
     <groupId>org.hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>2.0.0</version> 
    </dependency> 

</dependencies> 

的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> 
    <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property> 
    <property name="hibernate.connection.url">jdbc:hsqldb:hsql://localhost</property> 
    <property name="hibernate.connection.username">sa</property> 

    <property name="connection.password"></property> 

<property name="connection.pool_size">1</property> 

<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> 

    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</property> 

<property name="show_sql">true</property> 

<property name="hbm2ddl.auto">update</property> 



<mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/> 
</session-factory> 
</hibernate-configuration> 

主要

package org.hibernate.tutorial.domain; 

import java.util.Date; 

import org.hibernate.Session; 
import org.hibernate.tutorial.util.HibernateUtil; 

public class EventManager { 

public static void main(String[] args) { 
    EventManager mgr = new EventManager(); 


    Session session = HibernateUtil.buildSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 

    Event theEvent = new Event(); 
    theEvent.setTitle("My Event"); 
    theEvent.setDate(new Date()); 
    session.save(theEvent); 

    session.getTransaction().commit(); 


    session.close(); 
    } 
} 

的Util,我做了一些改動

import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.service.ServiceRegistryBuilder; 


public class HibernateUtil { 
private static SessionFactory sessionFactory; 
private static ServiceRegistry serviceRegistry; 

public static SessionFactory buildSessionFactory() { 
    try { 
     // Create the SessionFactory from hibernate.cfg.xml 
     Configuration configuration = new Configuration(); 
     configuration.configure(); 
     serviceRegistry = new  ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();  
     return new Configuration().configure().buildSessionFactory(serviceRegistry); 
    } catch (Throwable ex) { 
     // Make sure you log the exception, as it might be swallowed 
     System.err.println("Initial SessionFactory creation failed." + ex); 
     throw new ExceptionInInitializerError(ex); 
    } 
} 

public static SessionFactory getSessionFactory() { 
    return sessionFactory; 
} 
} 

我希望這是正確的做法:在開始之前我主我開始通過

mvn exec:java -Dexec.mainClass="org.hsqldb.Server" -Dexec.args="file:target/data/tutorial" 

HSQLDB的服務器,然後我開始我的主要方法:

mvn exec:java -Dexec.mainClass="org.hibernate.tutorial.EventManager" 

我的最後一個錯誤是:

org.hibernate.SessionException:會話已關閉

+0

嘗試使用sessionFactory.openSession()呢? –

+0

使用HibernateUtil.getSessionFactory()。close();現在。但現在我開始另一個錯誤:無法執行目標org.codehaus.mojo:exec-maven-plugin:1.2.1:項目上的java hibernate-tutorial:執行Java類時發生異常。 null:InvocationTargetException:NullPointerException – user1460679

+0

HibernateUtil.getSessionFactory()。close();拋出一個NullpointerException – user1460679

回答

0

由於沒有將會話綁定到會話上下文的機制,因此應該只使用openSessio n()獲得一個新的會話。

如果你開始你可以指定一個會話的上下文更嚴重的方式使用Hibernate以確保會話可以從的getCurrentSession()獲得