我有一个JPA2 + Hibernate web项目,我想测试它是否仍然存在。
这是实体:
package model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity(name="alunos")
public class Aluno {
@Id @GeneratedValue
private Long id;
private String nome;
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
这是persistence.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/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">
<persistence-unit name="PrimeiroProjetoJSF" transaction-type="RESOURCE_LOCAL">
<class>model.Aluno</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@------------"/>
<property name="javax.persistence.jdbc.user" value="-----"/>
<property name="javax.persistence.jdbc.password" value="------"/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
</persistence-unit>
</persistence>
这是一个用main()
方法来测试持久性的类:
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import model.Aluno;
public class GeraTabelas {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("PrimeiroProjetoJSF");
EntityManager fac = factory.createEntityManager();
Aluno arthur = new Aluno();
arthur.setNome("Arthur");
fac.persist(arthur);
factory.close();
}
}
当我运行它时,抛出以下异常:
Exception in thread "main" javax.persistence.PersistenceException: Unable to build entity manager factory
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:81) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at GeraTabelas.main(GeraTabelas.java:10)
Caused by: java.lang.NullPointerException
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:244)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206)
at
org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:399)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactory>uilderImpl.java:842)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:73)
... 4 more
这是如何引起的?如何解决?
答案 0 :(得分:2)
当MySQL没有运行时,我遇到了这个问题。启动MySQL解决了它。
答案 1 :(得分:1)
对于搜索此例外的任何人:
Exception during lifecycle processing
java.lang.NullPointerException
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:244)
我在数据库服务器重新启动时看到的异常是我忘记配置应用程序服务器连接池以自动检测过时连接并重新获取它们。换句话说,如果重新启动数据库服务器,则必须重新启动应用程序服务器或刷新连接池。可以在GlassFish中自动刷新连接池,例如通过配置连接验证,并选择在连接未验证时关闭所有连接。 Oracle的简单表验证方法是查询SYS.DUAL。
答案 2 :(得分:0)
我发现了自己的错误。它是另一个标记为@Entity的类,但未在persistence.xml上声明。不仅如此,图书馆也不见了。我用一个工作的替换了所有的libs