Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate字节码增强错误地应用于每个字段_Hibernate_Kotlin_Lazy Loading_Jvm Bytecode_Byte Code Enhancement - Fatal编程技术网

Hibernate字节码增强错误地应用于每个字段

Hibernate字节码增强错误地应用于每个字段,hibernate,kotlin,lazy-loading,jvm-bytecode,byte-code-enhancement,Hibernate,Kotlin,Lazy Loading,Jvm Bytecode,Byte Code Enhancement,我有这个实体: @Repository interface SimpleEntityRepository : JpaRepository<SimpleEntity, Long> @Entity open class SimpleEntity( @Basic(fetch = FetchType.EAGER) open var first: String, open var second: Long, open var third: Boolean,

我有这个实体:

@Repository
interface SimpleEntityRepository : JpaRepository<SimpleEntity, Long>

@Entity
open class SimpleEntity(
    @Basic(fetch = FetchType.EAGER)
    open var first: String,
    open var second: Long,
    open var third: Boolean,
    @Id @GeneratedValue
    open var id: Long = 0
) {
    constructor() : this("first", 2, false)
}
@存储库
接口SimpleEntityRepository:JpaRepository
@实体
开放类简单性(
@基本(fetch=FetchType.EAGER)
首先打开var:String,
打开第二个:长,
第三个开放变量:布尔,
@Id@GeneratedValue
打开变量id:Long=0
) {
构造函数():此(“第一个”,2,false)
}
正如您所看到的,每个字段都是开放的(不是最终的),类也是开放的,我有一个默认的构造函数(我知道有一些插件只是这样做,但现在它超出了范围)

所有字段都是
Basic
hibernate字段,如果这些字段上没有
@Basic(fetch=FetchType.LAZY)
注释,则应立即获取这些字段。
我所期望的是,没有一个的字段通过插件得到增强,但是,如果我启用它,它会尝试增强每个字段

即使我显式地将每个字段注释为
@Basic(fetch=FetchType.EAGER)
插件仍然会增强它。
我甚至用
javap
验证了这一点,它们都是字节码增强的。
我尝试使用运行时增强,希望由于某种奇怪的原因,结果会改变,但显然不会

为什么插件试图增强所有实体的所有基本字段?!这是设计的吗?
这会在我的final字段的生产代码中产生IllegalAccessError(显然是因为无法在该字段上设置获取的惰性值),但我从未将它们注释为惰性

我在github上有一个这种行为的例子:

git@github.com:BlackTazz89/hibernate-enhance-square-behavior.git

如果要执行快速检查,只需克隆回购并执行:

/mvnw clean-package&&javap-v target/classes/com/example/demo/core/simplentity.class | grep“Method\$\$\u hibernate”

要触发final字段的问题,只需更改
val first
中的
var first
字段,运行
java-jar-target/demo-0.0.1-SNAPSHOT.jar
,您将看到:

java.lang.IllegalAccessError:更新到非静态最终字段com.example.demo.core.SimpleEntity.first尝试使用与初始值设定方法不同的方法($$\u hibernate\u write\u first)

有人有办法解决这个问题吗

非常感谢,
祝你今天愉快