Hibernate - OGM [PersistenceUnit:person]无法构建Hibernate SessionFactory [英] Hibernate - OGM [PersistenceUnit: person] Unable to build Hibernate SessionFactory

查看:241
本文介绍了Hibernate - OGM [PersistenceUnit:person]无法构建Hibernate SessionFactory的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到一个下面的错误


线程main中的异常javax.persistence.PersistenceException:[PersistenceUnit:person]无法建立在org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249)
的SessionFactory
在org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access $ 600(EntityManagerFactoryBuilderImpl。的java:120)
。在org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform(EntityManagerFactoryBuilderImpl.java:860)$ b $在org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform b( EntityManagerFactoryBuilderImpl.java:850)
处org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425)
。构建(EntityManagerFactoryBuilderImpl.java:849)
在org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)
在org.hibernate.ogm.jpa.HibernateOgmPersistence.createEntityManagerFactory(HibernateOgmPersistence.java:63)
在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)
引起: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.SessionFactory Impl。(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
导致:org.hibernate.HibernateException:在org.hibernate中UUID转换为
的未预料到的返回类型[java.lang.Long]。 id.UUIDGenerator.configure(UUIDGenerator.java:111)在org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:117)

... 13更


Utilty.java

  public class Utility { 
private static EntityManagerFactory entityManagerFactory;

// @ BeforeClass
public static EntityManagerFactory setUpEntityManagerFactory(){
entityManagerFactory = Persistence.createEntityManagerFactory(person);
返回entityManagerFactory;


// @ AfterClass
public static void closeEntityManagerFactory(){
entityManagerFactory.close();




$ b $持续班

  @Entity 
public class Person {

@Id
@GeneratedValue(generator =uuid)
@GenericGenerator(name =uuid,strategy =uuid2)
私人长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自动生成的方法存根

EntityManagerFactory emf = Utility.setUpEntityManagerFactory();

EntityManager em = emf.createEntityManager();

em.getTransaction()。begin();

//创建一个人
Person bob =新人(Bob,McRobb);

em.persist(bob);
em.getTransaction()。commit();
em.close();
emf.close();



$ b

persistance.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 =persontransaction-type =JTA>
< provider> org.hibernate.ogm.jpa.HibernateOgmPersistence< / provider>
< class> com.ihappyk.model.Person< / class>
<属性>
< property name =hibernate.ogm.datastore.providervalue =mongodb/>
< property name =hibernate.ogm.datastore.databasevalue =hibernateOGM/>
< property name =hibernate.ogm.datastore.hostvalue =127.0.0.1/>
< property name =hibernate.ogm.datastore.portvalue =27017/>
< property name =hibernate.ogm.datastore.providervalue =org.hibernate.ogm.datastore.mongodb.impl.MongoDBDatastoreProvider/>

< property name =hibernate.transaction.jta.platformvalue =org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform/>
< / properties>
< / persistence-unit>
< /余辉>


解决方案

根异常说明了一切:

 引起:org.hibernate.HibernateException:对于UUID 

您正在使用不支持的类型的UUID ID生成器。在这种情况下,您应该使用字符串而不是 Long


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

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 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>

解决方案

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.

这篇关于Hibernate - OGM [PersistenceUnit:person]无法构建Hibernate SessionFactory的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆