解決策が見つかりませんか?
質問はEbeanフォーラムに投稿してください:Ebean Google グループ または Ebean GitHub ディスカッション
java.lang.IllegalStateException: Beanクラス_はエンハンスされていませんか?
対処方法
1. IDEAまたはEclipseのIDEエンハンスメントプラグインがインストールされていることを確認してください。
2. MavenまたはGradleのエンハンスメントプラグインが使用されていることを確認してください。
エンハンスメントの詳細については、ドキュメント/はじめにを参照してください。
クエリビーンを使用したNullPointerException
例
new QCustomer
.name.istartsWith("rob") // <-- Getting NPE here
.findList()
診断
Javaの場合:クエリビーンまたはクエリビーンを使用するコードがエンハンスされていません。
Kotlinの場合:クエリビーンがエンハンスされていません。
対処方法
1. `ebean.mf`の`querybean-packages`エントリを確認します。
Javaの場合:クエリビーンを使用するコードとクエリビーン自体の両方をエンハンスする必要があります。`querybean-packages`で指定されたパッケージには、クエリビーンを使用するコードを含める必要があります。
Kotlinの場合:Kotlinでは、クエリビーン自体(呼び出しコードではない)のみをエンハンスする必要があります。Kotlinの場合、`querybean-packages`にはクエリビーンを含めるだけで済みます。
12.1.8以降、クエリビーンエンハンスメントをサポートするために`ebean.mf`は不要になりました。
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は、問題のビーンをエンティティビーンと見なしていません。または、エンティティビーンを明示的に登録しており(ServerConfig.addClass()経由)、そのエンティティビーンを追加していません。
対処方法
1. ビーンに`@Entity`アノテーションが付いていることを確認します。
2. 必要に応じてエンティティビーンを登録します。
エンティティビーンが`serverConfig.addClass()`によって明示的に登録されている場合、このエンティティビーンクラスも含まれている必要がある可能性があります。
典型的なスタックトレース
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
DataSourceユーザーがnullですか?
対処方法
1. データソースを指定するapplication-test.yml(または同等物)があることを確認します。
2. `io.ebean : ebean-test`がテスト依存関係であることを確認します。
`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. エラーが発生しているエンティティビーンに、明示的にデフォルトコンストラクタを追加します。このコンストラクタは、一時フィールドを含むすべてのフィールドを初期化し、Ebeanはこのコンストラクタをデフォルトコンストラクタの追加の代わりに使用します。
2. または(推奨されません)`src/resources/ebean.mf`に`transient-init-error: false`を追加して、このエラーをオフにします。これは推奨されませんが、必要に応じて古い動作をサポートするために使用できます。この場合、Ebeanがインスタンスを作成するときに、一時フィールドは初期化されません。
診断
これは、デフォルトコンストラクタを持たず、コンストラクタ内のコードが一時(非永続)フィールドをEbeanエージェントがサポートできない方法で初期化するエンティティビーンをエンハンスしている場合に、*ebean-agent*によってスローされるエラーです。
一時フィールドがコンストラクタで初期化される場合、型なし引数のデフォルトコンストラクタを使用する単純な`
この制限に達した場合、デフォルトコンストラクタを自分で追加することを選択できます。このようにして、完全な制御を得ることができ、Ebeanエージェントはデフォルトコンストラクタを追加する必要がありません。
「サポートされていません」は、実際には、Ebeanエージェントが追加しているデフォルトコンストラクタで、それらの一時フィールドを初期化できないことを意味します。Ebeanがインスタンスを作成する場合(このデフォルトコンストラクタを使用する場合、`transient-init-error: false`を使用する場合)、それらのフィールドは初期化されません(null、0、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.dokyumento.jp/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.dokyumento.jp/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`では、このエラーがデフォルトで有効になりました。