Java Hibernate - OGM [PersistenceUnit: person] 无法构建 Hibernate SessionFactory
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/31161042/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Hibernate - OGM [PersistenceUnit: person] Unable to build Hibernate SessionFactory
提问by ihappyk
i am getting an below error
我收到以下错误
Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: person] Unable to build Hibernate SessionFactory at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:120) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:860) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75) at org.hibernate.ogm.jpa.HibernateOgmPersistence.createEntityManagerFactory(HibernateOgmPersistence.java:63) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39) at com.ihappyk.utility.Utility.setUpEntityManagerFactory(Utility.java:11) at com.ihappyk.work.PersonWorker.main(PersonWorker.java:14) Caused by: org.hibernate.MappingException: Could not instantiate id generator [entity-name=com.ihappyk.model.Person] at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:123) at org.hibernate.mapping.SimpleValue.createIdentifierGenerator(SimpleValue.java:225) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:323) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857) ... 9 more Caused by: org.hibernate.HibernateException: Unanticipated return type [java.lang.Long] for UUID conversion at org.hibernate.id.UUIDGenerator.configure(UUIDGenerator.java:111) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:117) ... 13 more
线程“main”中的异常 javax.persistence.PersistenceException: [PersistenceUnit: person] 无法在 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249) 在 org.hibernate.jpa 构建 Hibernate SessionFactory。 boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:120) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:860) at 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) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75) at org.hibernate.ogm.jpa.HibernateOgmPersistence.createEntityManagerFactory(HibernateOgm6Persistence.javax.createEntityManagerFactory(HibernateOgm6Persistence) .createEntityManagerFactory(Persistence.java:55) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39) at com.ihappyk.utility.Utility.setUpEntityManagerFactory(Utility.java:11) at com.ihappyk.work.PersonWorker。 main(PersonWorker.java:14) 引起:org.hibernate.MappingException:无法在 org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator( DefaultIdentifierGeneratorFactory。java:123) 在 org.hibernate.mapping.SimpleValue.createIdentifierGenerator(SimpleValue.java:225) 在 org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.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:意外的返回类型 [java.lang.Long]用于 org.hibernate.id.UUIDGenerator.configure(UUIDGenerator.java:111) at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:117) ... 13 处的 UUID 转换225) 在 org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.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: Unexpected return type [java.lang.Long] 在 org.hibernate.id.UUIDGenerator.configure(UUIDGenerator.java:111) 的 UUID 转换) 在 org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:117) ... 13 更多225) 在 org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.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: Unexpected return type [java.lang.Long] 在 org.hibernate.id.UUIDGenerator.configure(UUIDGenerator.java:111) 的 UUID 转换) 在 org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:117) ... 13 更多internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857) ... 9 导致:org.hibernate.HibernateException:在 org.hibernate.id.UUIDGenerator.configure 进行 UUID 转换的意外返回类型 [java.lang.Long] (UUIDGenerator.java:111) 在 org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:117) ... 13 更多internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857) ... 9 导致:org.hibernate.HibernateException:在 org.hibernate.id.UUIDGenerator.configure 进行 UUID 转换的意外返回类型 [java.lang.Long] (UUIDGenerator.java:111) 在 org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:117) ... 13 更多createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:117) ... 13 更多createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:117) ... 13 更多
Utilty.java
实用程序
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();
}
}
Persistant Class
持久化类
@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;
}
}
main class
主类
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();
}
}
persistance.xml
持久性.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>
采纳答案by Gunnar
The root exception says it all:
根异常说明了一切:
Caused by: org.hibernate.HibernateException: Unanticipated return type [java.lang.Long] for UUID
You are using a UUID id generator on a type which it does not support. You should use String
instead of Long
in this case.
您在不支持的类型上使用 UUID id 生成器。在这种情况下,您应该使用String
代替Long
。
回答by Ruthi Ruth
I do not know if the problem still exists, but I thought you have to put the persistence.xml file into src/main/META-INF folder. I see you put it into src/META-INF. Maybe that is the Problem? and of course the entities you want to link belong in src/main folder, too :)
我不知道问题是否仍然存在,但我认为您必须将 persistence.xml 文件放入 src/main/META-INF 文件夹中。我看到你把它放到 src/META-INF 中。也许这就是问题所在?当然,您要链接的实体也属于 src/main 文件夹:)
回答by Skizzo
Firstly you should share your the complete stacktrace about the exception and the persistence.xml content. Then in my opinion based on what I see the problem could be that you don't have declared a persistence provider in your persistence.xml. In fact if you are developing in a non container managed envirorment you need to declare a persistence provider.
首先,您应该分享有关异常和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>
回答by ethemsulan
- if you use this deprecated org.hibernate.ejb.HibernatePersistence set new provider like below
- 如果您使用这个已弃用的 org.hibernate.ejb.HibernatePersistence 设置新的提供者,如下所示
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
- if your value is
- 如果你的价值是
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.hbm2ddl.auto" value="update" />
set "create-drop"
设置“创建删除”
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
- XML path: resources/META-INF/persistence.xml
- For mysql
- XML 路径:resources/META-INF/persistence.xml
- 对于 mysql
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<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>