使用JPA注释运行hibernate时出现异常



在使用JPA注释运行示例hibernate应用程序时,我得到以下异常:

Feb 5, 2015 4:56:45 PM org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
Feb 5, 2015 4:56:45 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.2.1.Final}
Feb 5, 2015 4:56:45 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Feb 5, 2015 4:56:45 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Feb 5, 2015 4:56:45 PM org.hibernate.ejb.Ejb3Configuration prepareProperties
WARN: HHH000059: Defining hibernate.transaction.flush_before_completion=true ignored in HEM
Feb 5, 2015 4:56:45 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Feb 5, 2015 4:56:45 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 1
Feb 5, 2015 4:56:45 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000006: Autocommit mode: true
Feb 5, 2015 4:56:45 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000401: using driver [org.apache.derby.jdbc.EmbeddedDriver] at URL [jdbc:derby://localhost:1527/HibernateDb;create=true]
Feb 5, 2015 4:56:45 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000046: Connection properties: {user=user, password=****, autocommit=true, release_mode=auto}
Initial SessionFactory creation failed.java.lang.NullPointerException
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.jpa.test.EntityManagerUtil.<clinit>(EntityManagerUtil.java:16)
at com.jpa.test.JPAExample.<init>(JPAExample.java:10)
at com.jpa.test.JPAExample.main(JPAExample.java:13)
Caused by: java.lang.NullPointerException
at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:214)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117)
at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:78)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2293)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2289)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1758)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:913)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:898)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:59)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
at com.jpa.test.EntityManagerUtil.<clinit>(EntityManagerUtil.java:12)
... 2 more

我的EntityManagerUtil类是这样的:

private static final EntityManagerFactory entityManagerFactory;
static {
    try {
        entityManagerFactory = Persistence.createEntityManagerFactory("test");
    } catch (Throwable ex) {
        System.err.println("Initial SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}
public static EntityManager getEntityManager() {
    return entityManagerFactory.createEntityManager();
}

我的main类是:

public class JPAExample {
private EntityManager entityManager = EntityManagerUtil.getEntityManager();
public static void main(String[] args) {
    JPAExample example = new JPAExample();
    System.out.println("After Sucessfully insertion ");
    Student student1 = example.saveStudent("Sumith");
    Student student2 = example.saveStudent("Anoop");
    example.listStudent();
    System.out.println("After Sucessfully modification ");
    example.updateStudent(student1.getStudentId(), "Sumith Honai");
    example.updateStudent(student2.getStudentId(), "Anoop Pavanai");
    example.listStudent();
    System.out.println("After Sucessfully deletion ");
    example.deleteStudent(student2.getStudentId());
    example.listStudent();
}
public Student saveStudent(String studentName) {
    Student student = new Student();
    try {
        System.out.println("entityManager.getTransaction(): "+entityManager.getTransaction());
        entityManager.getTransaction().begin();
        student.setStudentName(studentName);
        student = entityManager.merge(student);
        entityManager.persist(student);
        System.out.println("Student saved successfully....");
        entityManager.getTransaction().commit();
    } catch (Exception e) {
        e.printStackTrace();
        if(entityManager.getTransaction().isActive()) {
            entityManager.getTransaction().rollback();
        }
    }
    return student;
}
public void listStudent() {
    try {
        entityManager.getTransaction().begin();
        @SuppressWarnings("unchecked")
        List<Student> Students = entityManager.createQuery("from Student").getResultList();
        for (Iterator<Student> iterator = Students.iterator(); iterator.hasNext();) {
            Student student = (Student) iterator.next();
            System.out.println("Student name: "+student.getStudentName());
        }
        entityManager.getTransaction().commit();
    } catch (Exception e) {
        e.printStackTrace();
        if(entityManager.getTransaction().isActive()) {
            entityManager.getTransaction().rollback();
        }
    }
}
public void updateStudent(Long studentId, String studentName) {
    try {
        entityManager.getTransaction().begin();
        Student student = (Student) entityManager.find(Student.class, studentId);
        student.setStudentName(studentName);
        entityManager.getTransaction().commit();
    } catch (Exception e) {
        if(entityManager.getTransaction().isActive()) {
            entityManager.getTransaction().rollback();
        }
    }
}
public void deleteStudent(Long studentId) {
    try {
        entityManager.getTransaction().begin();
        Student student = (Student) entityManager.find(Student.class, studentId);
        entityManager.remove(student);
        entityManager.getTransaction().commit();
    } catch (Exception e) {
        if(entityManager.getTransaction().isActive()) {
            entityManager.getTransaction().rollback();
        }
    }
}

}

我的persistence.xml文件:

<?xml version="1.0" encoding="UTF-8" ?> 
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.jpa.test.Student</class>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/HibernateDb;create=true"/>
        <property name="javax.persistence.jdbc.user" value="user"/>
        <property name="javax.persistence.jdbc.password" value="password"/>
        <property name="hibernate.connection.pool_size" value="1"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
        <property name="hibernate.hbm2ddl.auto" value="create"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.transaction.flush_before_completion" value="true" />
        <property name="hibernate.default_schema" value="TESTSCHEMA"/>
    </properties>
</persistence-unit>

有人能告诉我这个例外的原因是什么吗?

替换这些属性:

<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/HibernateDb;create=true"/>
<property name="javax.persistence.jdbc.user" value="user"/>
<property name="javax.persistence.jdbc.password" value="password"/>

带有:

<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/HibernateDb;create=true"/>
<property name="hibernate.connection.username" value="user"/>
<property name="hibernate.connection.password" value="password"/>

最新更新