我有以下代碼:
@Entity
@Table(name = "`users`")
class User(
var name: String,
var avatar: ByteArray
) {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
var id: Long = -1
fun getAvatarAsImage(): BufferedImage? {
val img: InputStream = ByteArrayInputStream(avatar)
return ImageIO.read(img)
}
fun setAvatarAsImage(img: BufferedImage) {
val out = ByteArrayOutputStream()
ImageIO.write(img, "PNG", out)
avatar = out.toByteArray()
}
}
但是hibernate說id是私有的(那是因為kotlin自動生成getter和setter),所以編譯成java看起來像:
@Id
@GeneratedValue(
strategy = GenerationType.AUTO
)
private long id;
public long getId() {
return this.id;
}
public void setId(long var1) {
this.id = var1;
}
問題:如何使其編譯為:
@Id
@GeneratedValue(
strategy = GenerationType.AUTO
)
public long id;
???
我知道這是什么....
uj5u.com熱心網友回復:
我不確定您是否正確解釋了來自 Hibernate 的錯誤訊息,因為@Id-annotation 似乎正確。但我想知道您是否可能忘記使用有助于創建 Hibernate 友好類的 kotlin-jpa 編譯器插件?
在此處閱讀更多資訊:https ://kotlinlang.org/docs/no-arg-plugin.html#jpa-support
也許您可以嘗試將注釋放在 getter 上,而不是強制 Hibernate 使用基于屬性的訪問...嘗試將注釋修改為:
@get:Id
@get:GeneratedValue(strategy = GenerationType.AUTO)
var id: Long = -1
...甚至在最壞的情況下,將欄位公開(如您所要求的那樣)...
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JvmField
var id: Long = -1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/531990.html
標籤:春天休眠科特林
上一篇:使用Quarkus的HibernateReactive中的LazyInitializationException(Panache)
