我收到以下错误

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

实用程序.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(); 
    } 
} 

持久化类

@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(); 
 
    } 
 
} 

持久性.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> 

请您参考如下方法:

根异常说明了一切:

Caused by: org.hibernate.HibernateException: Unanticipated return type [java.lang.Long] for UUID 

您在不支持的类型上使用 UUID id 生成器。在这种情况下,您应该使用 String 而不是 Long


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!