Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在实体声明中使用Hibernate OGM和MongoDB时出现异常_Java_Mongodb_Kotlin_Persistence_Hibernate Ogm - Fatal编程技术网

Java 在实体声明中使用Hibernate OGM和MongoDB时出现异常

Java 在实体声明中使用Hibernate OGM和MongoDB时出现异常,java,mongodb,kotlin,persistence,hibernate-ogm,Java,Mongodb,Kotlin,Persistence,Hibernate Ogm,我无法使用Hibernate OGM和mongoDB初始化我的EntityManagerFactory,我遇到以下异常: Exception in thread "main" java.lang.ExceptionInInitializerError at model.DBManager.initEntityManagerFactory(DBManager.kt:11) at controller.restapi.RestapiApplicationKt.main(Res

我无法使用Hibernate OGM和mongoDB初始化我的EntityManagerFactory,我遇到以下异常:

    Exception in thread "main" java.lang.ExceptionInInitializerError
    at model.DBManager.initEntityManagerFactory(DBManager.kt:11)
    at controller.restapi.RestapiApplicationKt.main(RestapiApplication.kt:13)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: myPersistenceConfig] Unable to build Hibernate SessionFactory
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:970)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:895)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    at org.hibernate.ogm.jpa.HibernateOgmPersistence.createEntityManagerFactory(HibernateOgmPersistence.java:57)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at model.util.HibernateOGMUtil.<clinit>(HibernateOGMUtil.kt:15)
    ... 2 more
Caused by: org.hibernate.MappingException: Could not determine type for: applicationdatamodel.sleep.SleepLevels, at table: Sleep, for columns: [org.hibernate.mapping.Column(levels)]
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:456)
    at org.hibernate.mapping.Property.getType(Property.java:69)
    at org.hibernate.jpa.event.spi.JpaIntegrator.integrate(JpaIntegrator.java:150)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:281)
    at org.hibernate.ogm.boot.impl.OgmSessionFactoryBuilderImpl.build(OgmSessionFactoryBuilderImpl.java:55)
    at org.hibernate.ogm.boot.impl.OgmSessionFactoryBuilderImpl.build(OgmSessionFactoryBuilderImpl.java:23)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892)
class HibernateOGMUtil {

    companion object {

        private lateinit var entityManagerFactory: EntityManagerFactory

        init {
            try{
                entityManagerFactory = Persistence.createEntityManagerFactory("myPersistenceConfig")

            }catch (e:Exception){
                println(System.err.println("Initial EntityManagerFactory creation failed." + e))
            }
        }
        fun getEntityManagerFactory(): EntityManagerFactory{
            return entityManagerFactory
        }
    }
}
另一方面,我尝试从下一个实体中删除属性“levels”,然后,就没有例外了,持久性也可以工作。所以我认为这个属性有问题。也许我应该添加一个特别的注释,但我真的被这个问题困住了

这是我的密码:

import applicationdatamodel.sleep.SleepLevels
import org.hibernate.annotations.Type
import java.util.*
import javax.persistence.*

@Entity
data class Sleep (
    @Temporal(TemporalType.TIMESTAMP) val dateOfSleep: Date,
    val user_cif: String,
    val duration: Int,
    @Temporal(TemporalType.TIMESTAMP) val startTime: Date,
    @Temporal(TemporalType.TIMESTAMP) val endTime: Date,
    val minutesAsleep: Int,
    val minutesAwake: Int,
    val levels: SleepLevels
){
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Type(type = "objectid")
    private lateinit var id: String
}

我非常感谢您的帮助。

导致此问题的列是:
val levels:SleepLevels

Hibernate不知道如何在数据库上映射这个类(我假设它不是枚举)。 这意味着您需要将其映射为:

  • ,使用
    @embedded
    @embedded
    注释
  • ,使用
    @OneToOne
    @ManyToOne
    注释

  • 由于不知道您的模型的详细信息,我无法为您提供更多帮助,但您应该能够在官方hibernate文档中找到所需的所有详细信息。

    异常似乎与您发布的代码无关?你为什么不把代码贴在异常发生的地方?@Strelok我已经编辑过了。你是对的!希望现在更好。谢谢。您能否创建一个小项目作为示例,并将其发布到某个地方,以便我们可以重新创建错误?错误可能在配置中。您没有看到完整的异常。删除try-catch子句,以便获得hibernate异常的完整堆栈跟踪。