JPAEventListener クラス内で遅延初期化された Bean を使用できます。これは、エンティティが最初に永続化されるときに初期化されます。
次に、遅延ロードされた Bean で @Configurable を使用します。最善の解決策ではないかもしれませんが、簡単な回避策です
public class JPAEntityListener{
/**
* Hibernate JPA EntityListEner is not spring managed and gets created via reflection by hibernate library while entitymanager is loaded.
* Inorder to inject business rules via Spring use lazy loaded bean which makes use of @Configurable
*/
private CustomEntityListener listener;
public JPAEntityListener() {
super();
}
@PrePersist
public void onEntityPrePersist(TransactionalEntity entity) {
if (listener == null) {
listener = new CustomEntityListener();
}
listener.onEntityPrePersist(entity);
}
@PreUpdate
public void onEntityPreUpdate(TransactionalEntity entity) {
if (listener == null) {
listener = new CustomEntityListener();
}
listener.onEntityPreUpdate(entity);
}}
そして、遅延ロードされた Bean クラス
@Configurable(autowire = Autowire.BY_TYPE)
public class CustomEntityListener{
@Autowired
private Environment environment;
public void onEntityPrePersist(TransactionalEntity entity) {
//custom logic
}