我试图用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应用程序中实现的。为了确保模块之间的依赖关系没有问题,我在另一个项目中重新创建了结构,并且相同的代码按预期工作。
有人知道我在这里缺少什么吗?
答案 0 :(得分:0)
我终于开始工作了。事实证明,春天的devtools不知何故与kotlin和hibernate相冲突。从项目中删除后,一切都很顺利。