如何在Kotlin中强制将变量设为public以适配Hibernate
解决方法
在Kotlin的id字段上添加@JvmField注解即可实现需求:
@Entity @Table(name = "`users`") class User( var name: String, var avatar: ByteArray ) { @Id @GeneratedValue(strategy = GenerationType.AUTO) @JvmField 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() } }
原理说明
Kotlin中使用var声明的属性,默认会被编译为private成员字段,并自动生成对应的public getter/setter方法。而@JvmField注解会告诉Kotlin编译器不生成该属性的getter和setter,直接将字段编译为public的Java成员变量,完全匹配你需要的代码形式。
内容的提问来源于stack exchange,提问作者Bluecross
相关产品推荐
相关产品推荐

