在Hibernate中使用Java生成的UUID?
我知道你可以 但是在编写Kotlin时,在代码本身中生成它们似乎要干净得多。这样,您就不需要占位符值,并且id可以是非空值:在Hibernate中使用Java生成的UUID?,java,hibernate,kotlin,uuid,Java,Hibernate,Kotlin,Uuid,我知道你可以 但是在编写Kotlin时,在代码本身中生成它们似乎要干净得多。这样,您就不需要占位符值,并且id可以是非空值: @Id val id: String = UUID.randomUUID().toString() 但我想知道,这有什么我没有想到的错误吗?看起来如果它是UUID,那么谁会在乎它是由应用程序生成的还是由Hibernate本身生成的呢 我不确定,但在反序列化时,可能已经设置了id,如果您想在数据库中创建一个新条目并且已经分配了id,这可能是一个问题。我想到
@Id
val id: String = UUID.randomUUID().toString()
但我想知道,这有什么我没有想到的错误吗?看起来如果它是UUID,那么谁会在乎它是由应用程序生成的还是由Hibernate本身生成的呢 我不确定,但在反序列化时,可能已经设置了id,如果您想在数据库中创建一个新条目并且已经分配了id,这可能是一个问题。我想到的一件事是hibernate在获取期间将使用db中的id,而构造函数中生成的id将被忽略,但无论如何都会生成(浪费cpu和内存来生成它)。在这种情况下,如果字段上有
lateinit var
,您仍然可以使用非空字段。您还应该能够执行id:UUID=UUID.randomUUID()
没有严格键入field@krzychek所以hibernate创建对象,然后通过反射从结果集中设置其值?我原以为它会使用构造函数从结果集中设置值,但我想不会。无论如何,这是一个很小的性能考虑,我可能只会考虑这个,我想读得更多就我所知,Kotlin jpa插件为带有hibernate/jpa注释的类生成合成默认构造函数。hibernate应该使用这个默认构造函数并通过反射设置属性,就像在clean java中一样。