Hibernate 在运行时创建Pojo,并在将Pojo保存到磁盘后抛出一个错误作为类修剪?
参考下面的链接,我已经在运行时创建了类,在调用Hibernate 在运行时创建Pojo,并在将Pojo保存到磁盘后抛出一个错误作为类修剪?,hibernate,class,dynamic,bytecode,Hibernate,Class,Dynamic,Bytecode,参考下面的链接,我已经在运行时创建了类,在调用cc.toClass()之前或之后使用了cc.writeFile(//path”)类存储在指定的位置。 但在cc.writeFile()之后引发如下错误无法继续 线程“main”java.lang.RuntimeException:toBytecode():EmployeeEntity中的异常已被删除。当查看时,问题似乎是由以下事实引起的:已更改和已删除,两者均为true 实际上,至少在最近的版本中,默认情况下应该关闭自动修剪。但如果类文件已被修剪,
cc.toClass()
之前或之后使用了cc.writeFile(//path”)
类存储在指定的位置。
但在cc.writeFile()之后引发如下错误无法继续
线程“main”java.lang.RuntimeException:toBytecode():EmployeeEntity中的异常已被删除。当查看时,问题似乎是由以下事实引起的:已更改
和已删除
,两者均为true
实际上,至少在最近的版本中,默认情况下应该关闭自动修剪。但如果类文件已被修剪,则不应允许后续修改。这导致了这样一个结论:您不可能在这两者之间修改CtClass
对象,因此错误不在您这边。搜索文件中出现的wasChanged
,会发现该文件忘记将其设置为false
那么发生了什么呢
- 您设置了正在构造的类,它将
变为wasChanged
true
- 您调用
,它反过来调用toClass()
,将toBytecode
和prunted
设置为freezed
,不允许进一步修改,但忘记将true
设置为wasChanged
false
- 您可以调用
,它也会调用writeFile
,现在它会根据从不重置的标志检测文件已被修改,并在类被修剪时引发异常toBytecode
toClass()
和writeFile
,则逻辑保持不变,因为这两个函数都在内部调用toBytecode
,鉴于上述行为,不能调用两次
你有几个选择
- 您可以在调用
之前调用,因为toClass()
被记录为“在编写类文件后不修剪或冻结类”debugWriteFile
- 您可以在调用
或writeFile
之前调用。如上所述,修剪在默认情况下应该是均匀的toClass
- 你可以直接给自己打电话,只打一次。然后
- 一旦你有了字节数组,你就可以简单地将它写入一个文件(例如
- 要使用这个现有的字节数组来创建类,您可以使用自己的类加载器,或者使用Java 9或更高版本,并在自己的包中创建一个类