找不到解决方案?
在 Ebean 论坛发帖提问:Ebean google 组或:Ebean github 讨论
java.lang.IllegalStateException: Bean 类 _ 未增强?
操作
1. 检查是否已安装 IDEA 或 Eclipse 的 IDE 增强插件
2. 检查是否正在使用 maven 或 gradle 的增强插件
有关增强的更多详细信息,请参阅 文档/开始使用。
使用查询 Bean 时出现 NullPointerException
示例
new QCustomer
.name.istartsWith("rob") // <-- Getting NPE here
.findList()
诊断
对于 Java:查询 Bean 或使用查询 Bean 的代码未增强。
对于 Kotlin:查询 Bean 未增强。
操作
1. 检查 ebean.mf 中的 querybean-packages
条目
对于 Java:我们需要增强使用查询 Bean 的代码和查询 Bean 本身。querybean-packages
指定的包需要包括使用查询 Bean 的代码。
对于 Kotlin:对于 Kotlin,我们只需要增强查询 Bean 本身(而不是调用代码)。对于 Kotlin,querybean-packages
只需包含查询 Bean。
请注意,从 12.1.8 开始,我们不再需要 ebean.mf 来支持查询 Bean 增强。
EntityBeanIntercept 中的 NullPointerException
示例
Caused by: java.lang.NullPointerException: null at io.ebean.bean.EntityBeanIntercept.isLoadedProperty(EntityBeanIntercept.java:509) at io.ebean.bean.EntityBeanIntercept.preGetter(EntityBeanIntercept.java:914) at models.Security._ebean_get_status(Security.java:6)
诊断
对于 Java:可能存在有问题的 @OnetoMany
或 @ManyToOne
映射。
对于 Kotlin:可能存在有问题的 @OnetoMany
或 @ManyToOne
映射。
操作
1. 检查抛出异常的模型类中的映射。
在上面的示例中,它是models.Security
类。逐个注释掉每个映射,直到异常消失,然后你就可以确定问题所在。
RuntimeException:是否注册了 org.example.domain.Foo 类?
诊断
Ebean 不认为有问题的 bean 是实体 bean,或者我们正在显式注册实体 bean(通过 ServerConfig.addClass()),并且没有将实体 bean 添加到其中。
操作
1. 检查 bean 是否有 @Entity
注解
2. 必要时注册实体 bean
如果实体 bean 通过 serverConfig.addClass()
显式注册,则可能需要包含此实体 bean 类。
通常的堆栈跟踪
Caused by: java.lang.RuntimeException: Error with association to [class org.example.domain.Contact]
from [org.example.domain.Customer.contacts]. Is class org.example.domain.Contact registered?
at io.ebeaninternal.server.deploy.parse.AnnotationAssocManys.readToOne(AnnotationAssocManys.java:476)
at io.ebeaninternal.server.deploy.parse.AnnotationAssocManys.read(AnnotationAssocManys.java:73)
at io.ebeaninternal.server.deploy.parse.AnnotationAssocManys.parse(AnnotationAssocManys.java:64)
at io.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:50)
... 37 more
数据源用户为空?
操作
1. 检查是否有 application-test.yml(或等效文件)来指定数据源
2. 检查 io.ebean : ebean-test
是否是测试依赖项
请参阅 docs / testing 以设置 ebean-test
通常的堆栈跟踪
ERROR io.ebean.Ebean - Error trying to create the default EbeanServer
java.lang.RuntimeException: DataSource user is null?
at org.avaje.datasource.pool.ConnectionPool.<init>(ConnectionPool.java:207)
at org.avaje.datasource.core.Factory.createPool(Factory.java:15)
at io.ebeaninternal.server.core.DefaultContainer.getDataSourceFromConfig(DefaultContainer.java:273)
at io.ebeaninternal.server.core.DefaultContainer.setDataSource(DefaultContainer.java:217)
...
瞬态初始化
操作
1. 显式向具有错误的实体 bean 添加一个默认构造函数。此构造函数将初始化所有字段,包括瞬态字段,ebean 将使用此构造函数而不是添加默认构造函数。
2. 或(不推荐)添加 src/resources/ebean.mf
,其中包含 transient-init-error: false
以关闭此错误。不建议这样做,但如果需要,可以使用它来支持旧行为。在这种情况下,当 ebean 创建实例时,瞬态字段将保持未初始化状态。
诊断
这是由 ebean-agent 在增强没有默认构造函数的实体 bean 时抛出的错误,并且构造函数中的代码包含以 ebean-agent 无法支持的方式初始化瞬态(非持久)字段的代码。
如果在构造函数中初始化瞬态字段,则必须使用一个简单的 <init>,该 <init> 使用类型的无参数默认构造函数。不支持通过任何其他方式进行初始化(不支持使用方法或非默认构造函数)。
当遇到此限制时,我们可以选择自己添加一个默认构造函数。通过这种方式,我们可以获得完全控制,并且 ebean-agent 无需添加默认构造函数。
请注意,“不支持”实际上意味着 ebean-agent 无法在它正在添加的默认构造函数中初始化那些瞬态字段。当 ebean 使用此默认构造函数创建实例时,这些字段将保持未初始化状态,因此为 null、0、false 等 [当我们使用 transient-init-error: false
时]。
通常的堆栈跟踪
ebean-enhance> cls: test/model/BeanWithInvalidTransientInit msg: Error during transform java.lang.RuntimeException:
ERROR: Entity class without default constructor has unsupported initialisation of transient fields.
Entity class: test/model/BeanWithInvalidTransientInit - Unsupported initialisation of transient fields - [invalidTransientInitWithoutDefaultConstructor, invalidTransientInitViaMethod]
Refer: https://ebean.com.cn/docs/trouble-shooting#transient-initialisation
java.lang.RuntimeException: ERROR: Entity class without default constructor has unsupported initialisation of transient fields. Entity class: test/model/BeanWithInvalidTransientInit - Unsupported initialisation of transient fields - [invalidTransientInitWithoutDefaultConstructor, invalidTransientInitViaMethod] Refer: https://ebean.com.cn/docs/trouble-shooting#transient-initialisation
at io.ebean.enhance.entity.DefaultConstructor.add(DefaultConstructor.java:26)
at io.ebean.enhance.entity.ClassAdapterEntity.visitEnd(ClassAdapterEntity.java:214)
at io.ebean.enhance.asm.ClassReader.accept(ClassReader.java:748)
at io.ebean.enhance.asm.ClassReader.accept(ClassReader.java:424)
at io.ebean.enhance.Transformer.entityEnhancement(Transformer.java:266)
at io.ebean.enhance.Transformer.enhanceEntityAndTransactional(Transformer.java:223)
at io.ebean.enhance.Transformer.transform(Transformer.java:178)
at io.ebean.enhance.common.InputStreamTransform.transform(InputStreamTransform.java:53)
at io.ebean.enhance.common.InputStreamTransform.transform(InputStreamTransform.java:41)
at io.ebean.enhance.ant.OfflineFileTransform.transformFile(OfflineFileTransform.java:148)
at io.ebean.enhance.ant.OfflineFileTransform.processPackage(OfflineFileTransform.java:132)
at io.ebean.enhance.ant.OfflineFileTransform.processPackage(OfflineFileTransform.java:124)
at io.ebean.enhance.ant.OfflineFileTransform.processPackage(OfflineFileTransform.java:124)
at io.ebean.enhance.ant.OfflineFileTransform.process(OfflineFileTransform.java:66)
at io.ebean.enhance.maven.AbstractEnhance.executeFor(AbstractEnhance.java:77)
at io.ebean.enhance.maven.TestEnhanceMojo.execute(TestEnhanceMojo.java:27)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
请注意,Ebean 版本 13.12.0
默认启用了此错误。