Java Hibernate-OGM[PersistenceUnit:person]无法构建Hibernate SessionFactory
我得到一个错误 线程“main”javax.persistence.PersistenceException中出现异常:[PersistenceUnit:person]无法构建Hibernate SessionFactory 位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249) 在org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:120) 位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:860) 位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) 位于org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425) 位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849) 在org.hibernate.jpa.HibernatePersistenceProvider.createEntityManager工厂(HibernatePersistenceProvider.java:75) 位于org.hibernate.ogm.jpa.HibernateOgmPersistence.createEntityManagerFactory(HibernateOgmPersistence.java:63) 位于javax.persistence.persistence.createEntityManagerFactory(persistence.java:55) 位于javax.persistence.persistence.createEntityManagerFactory(persistence.java:39) 在com.ihappyk.utility.utility.setupEntityManager工厂(utility.java:11) 位于com.ihappyk.work.PersonWorker.main(PersonWorker.java:14) 原因:org.hibernate.MappingException:无法实例化id生成器[entity name=com.ihappyk.model.Person] 位于org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:123) 位于org.hibernate.mapping.SimpleValue.createIdentifierGenerator(SimpleValue.java:225) 位于org.hibernate.internal.sessionfactorympl。(sessionfactorympl.java:323) 位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859) 位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857) ... 9更多 原因:org.hibernate.HibernateException:UUID转换的意外返回类型[java.lang.Long] 位于org.hibernate.id.UUIDGenerator.configure(UUIDGenerator.java:111) 位于org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:117) ... 还有13个 Utilty.javaJava Hibernate-OGM[PersistenceUnit:person]无法构建Hibernate SessionFactory,java,xml,hibernate,hibernate-ogm,Java,Xml,Hibernate,Hibernate Ogm,我得到一个错误 线程“main”javax.persistence.PersistenceException中出现异常:[PersistenceUnit:person]无法构建Hibernate SessionFactory 位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249) 在org.hi
public class Utility {
private static EntityManagerFactory entityManagerFactory;
//@BeforeClass
public static EntityManagerFactory setUpEntityManagerFactory() {
entityManagerFactory = Persistence.createEntityManagerFactory( "person" );
return entityManagerFactory;
}
//@AfterClass
public static void closeEntityManagerFactory() {
entityManagerFactory.close();
}
}
持久类
@Entity
public class Person {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private long id;
private String firstName;
private String lastName;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Person(){
}
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
主类
public class PersonWorker {
public static void main(String[] args) {
// TODO Auto-generated method stub
EntityManagerFactory emf = Utility.setUpEntityManagerFactory();
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// create a Person
Person bob = new Person( "Bob", "McRobb" );
em.persist( bob );
em.getTransaction().commit();
em.close();
emf.close();
}
}
persistence.xml
<?xml version="1.0"?>
<persistence 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"
version="2.0">
<persistence-unit name="person" transaction-type="JTA">
<provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider>
<class>com.ihappyk.model.Person</class>
<properties>
<property name="hibernate.ogm.datastore.provider" value="mongodb" />
<property name="hibernate.ogm.datastore.database" value="hibernateOGM" />
<property name="hibernate.ogm.datastore.host" value="127.0.0.1" />
<property name="hibernate.ogm.datastore.port" value="27017" />
<property name="hibernate.ogm.datastore.provider" value="org.hibernate.ogm.datastore.mongodb.impl.MongoDBDatastoreProvider"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform"/>
</properties>
</persistence-unit>
</persistence>
org.hibernate.ogm.jpa.hibernateogm持久性
com.ihappyk.model.Person
我不知道问题是否仍然存在,但我认为您必须将persistence.xml文件放入src/main/META-INF文件夹中。我看到你把它放进了src/META-INF。也许这就是问题所在?当然,要链接的实体也属于src/main文件夹:)首先,您应该共享有关异常和persistence.xml内容的完整堆栈跟踪。然后,根据我所看到的情况,我认为问题可能是您没有在persistence.xml中声明持久性提供者。事实上,如果您在非容器管理的环境中开发,您需要声明一个持久性提供程序
<persistence 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"
version="2.0">
<persistence-unit name="myunit" >
<provider>org.hibernate.ejb.HibernatePersistence</provider>
//Others properties
</persistence-unit>
org.hibernate.ejb.HibernatePersistence
//其他财产
根异常说明了一切:
Caused by: org.hibernate.HibernateException: Unanticipated return type [java.lang.Long] for UUID
您正在不支持的类型上使用UUID id生成器。在这种情况下,应该使用String
而不是Long
org.hibernate.jpa.HibernatePersistenceProvider
设置“创建拖放”
org.hibernate.jpa.HibernatePersistenceProvider
这属于eclipse
项目管理。你应该明确地将你的persistence.xml
标记为要添加到build中。是的,我已经在项目的构建路径中配置了它,只是像maven这样的工具使用了/src/main/…,在一个普通的java项目中,这是一个正确的位置。但是这个例子是在你提供的链接上给出的。它仍然是一样的,无法生成hibernateSession工厂
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.connection.username" value="yourname"/>
<property name="hibernate.connection.password" value="yourpassword"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/yourschema"/>
<property name="hibernate.max_fetch_depth" value="3"/>
</properties>
</persistence-unit>
</persistence>