リアルタイムアプリケーションを構築し、エンティティリスナを使用して状態を最新の状態に保ちようとしています。基本的な考え方は、ビジネスロジックの領域が変わるたびに、影響を受けるエンティティをリロードし、変更を調整することです。ここにMWEがあります:Hibernate JPAエンティティリスナ@Preと@Postが期待どおりに動作しない
@PrePersist
public void PrePersist() {
LoggerFactory.logger(App.class).info(" >>> PrePersist count: " + getStars().size());
}
@PostPersist
public void PostPersist() {
LoggerFactory.logger(App.class).info(" >>> PostPersist count: " + getStars().size());
}
@PreRemove
public void PreRemove() {
LoggerFactory.logger(App.class).info(" >>> PreRemove count: " + getStars().size());
}
@PostRemove
public void PostRemove() {
LoggerFactory.logger(App.class).info(" >>> PostRemove count: " + getStars().size());
}
private List<Star> getStars() {
EntityManager em = HibernateUtilJpa.getEntityManager();
List<Star> l = new ArrayList<Star>();
try {
em.getTransaction().begin();
l = em.createQuery("from Star", Star.class).getResultList();
em.getTransaction().commit();
} catch (Exception e) {
em.getTransaction().rollback();
} finally {
em.close();
}
return l;
}
DBに星を挿入/削除するために別のAPIを使用しています。私は、ポスト・サスティンが追加されたアイテムのために1つ以上のアイテムを表示し、ポスト・リムーバルがプレ・リムーバルより1つ少ないことを期待していました。これはそうではありません。ポスト・サスティングとポスト・リムーバルの両方でアイテムの数が正しくないので、プリ・パーシストはポスト・サスティンと同じで、プレ・リムーバルは削除後と同じです。私はそれがHibernateのキャッシングに関係していると確信していますが、私はトランザクションを使用しており、すべてがEntityManager
を通過するので、私は頭を傷つけています。