Kotlin& Hibernate IllegalArgumentException:无法将String字段Job.name设置为Job

时间:2017-10-22 07:54:14

标签: java spring postgresql hibernate kotlin

我试图用hibernate将一个对象持久化到postgres db中。该课程如下:

@Entity
@Table(name = "jobs")
data class Job(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Int? = 0,
    var name: String? = ""
)

我使用以下代码创建一个hibernate会话:

fun createSessionFactory(targetClass: Class<*>): SessionFactory? {
    val registryBuilder = StandardServiceRegistryBuilder()

    if (sessionFactory == null) {
        val configuration = hashMapOf(
                Environment.DRIVER to "org.postgresql.Driver",
                Environment.URL to "jdbc:postgresql://localhost:5432/testdb",
                Environment.DIALECT to "org.hibernate.dialect.PostgreSQL9Dialect",
                Environment.USER to "user",
                Environment.PASS to "password",
                Environment.HBM2DDL_AUTO to "create"
        )


        registryBuilder.applySettings(configuration)
        serviceRegistry = registryBuilder.build()

        val sources = MetadataSources(serviceRegistry)
        sources.addAnnotatedClass(targetClass)
        val metadata = sources.metadataBuilder.build()

        sessionFactory = metadata.sessionFactoryBuilder.build()
    }
    return sessionFactory
}

当我尝试使用以下内容存储作业类的实例时

override fun persistEntity(entity: Job) {
    val session = databaseSession.createSessionFactory(Job::class.java)!!.openSession()
    session.beginTransaction()
    session.save(entity)

    session.transaction.commit()
    session.close()
    databaseSession.destroySession()
}

我得到异常java.lang.IllegalArgumentException:无法将java.lang.String字段Job.name设置为Job。

所有这些都是在具有多个模块的spring boot应用程序中实现的。为了确保模块之间的依赖关系没有问题,我在另一个项目中重新创建了结构,并且相同的代码按预期工作。

有人知道我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:0)

我终于开始工作了。事实证明,春天的devtools不知何故与kotlin和hibernate相冲突。从项目中删除后,一切都很顺利。