【发布时间】:2017-10-22 07:54:13
【问题描述】:
我正在尝试将具有休眠功能的单个对象持久保存到 postgres 数据库中。该类如下所示:
@Entity
@Table(name = "jobs")
data class Job(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Int? = 0,
var name: String? = ""
)
我使用以下代码创建了一个休眠会话:
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: Can not set java.lang.String field Job.name to Job。
所有这些都是在具有多个模块的 Spring Boot 应用程序中实现的。为了确保模块之间的依赖关系没有问题,我在另一个项目中重新创建了结构,并且相同的代码可以按预期工作。
有人知道我在这里缺少什么吗?
【问题讨论】:
标签: java spring postgresql hibernate kotlin