I have this problem and your help would be rellay appreciated ;
I need to do some NamedQueries execution INSIDE a method marked
as @PostPersist . I've read here and there that queries and entityManager
should not be involved in callback methods , like this link explain :
http://www.hibernate.org/hib_docs/entit ... eners.html
is this really so ? How can i persist manually something if i want to manually
persist it JUST in the moment which another particular object is persisted ?
My code is below ...
@NamedQuery(name = "brokers.insert", query = "INSERT INTO Broker (master_id,detail_id,type) SELECT b.master_id,b.detail_id,b.type FROM
Broker b WHERE (b.master_id=?2 AND b.detail_id=?3 AND b.type=?4)"),
@PostPersist
private void writeBrokers()
{
EntityManager em = JPAContext.entityManager();
EntityTransaction transazione = em.getTransaction();
List<Broker> brokers = getBrokersListForThisIdentifiable();
deleteBrokersGivenMasterId(em, brokers);
insertBrokersGivenMasterId(em, brokers);
}
private void insertBrokersGivenMasterId(EntityManager em, List<Broker> brokers)
{
Query insertBrokersGivenMasterId = em.createNamedQuery("brokers.insert");
for (int i = 0; i < brokers.size(); i++)
{
Broker broker = brokers.get(i);
Integer master_id = broker.getMasterId();
insertBrokersGivenMasterId.setParameter(2, broker.getMasterId());
insertBrokersGivenMasterId.setParameter(3, broker.getDetailId());
insertBrokersGivenMasterId.setParameter(4, broker.getType());
if(master_id == this.id)
insertBrokersGivenMasterId.executeUpdate();
}
}
private void deleteBrokersGivenMasterId(EntityManager em,List<Broker> brokers)
{
Query deleteBrokersGivenMasterId = em.createNamedQuery("brokers.delete");
for (int i = 0; i < brokers.size(); i++)
{
Broker broker = brokers.get(i);
deleteBrokersGivenMasterId.setParameter(1, broker.getMasterId());
if(broker.getMasterId() == this.id)
deleteBrokersGivenMasterId.executeUpdate();
}
}
}
i need to persist some object only in some cases ... and i don't want this specific case handled by jpa , i wish to handle this happening by myself...
i would be greatful for any advice , thank you a lot