Begehen während der Transaktion in der @Transactional
Ist das möglich, das eine commit-Methode, die markiert ist wie der Frühling ist @Transactional?
@PersistenceContext
private EntityManager em;
@Transactional(propagation = Propagation.REQUIRED)
public void saveMembersWithMultipleCommits(List<Member> members)
throws HibernateException
{
Iterator<Member> it = members.iterator();
while (it.hasNext())
{
while (it.hasNext())
{
Member wsBean = it.next();
em.persist(wsBean); //overall commit will be made after method exit
log.info("Webservices record " + wsBean + " saved. " + i++);
}
}
}
Ich würde gerne verpflichten, die DB nach sagen, jeder 500 Positionen. Ist das möglich mit oben genannten Kontext?
InformationsquelleAutor Michael Z | 2012-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, Sie müssen es tun, programmgesteuert verwenden, zum Beispiel, die
TransactionTemplate
API. Lesen Sie mehr hier.Sähe es so etwas wie
Nein, nur eine neue Transaktion.
InformationsquelleAutor pap
Deine Frage deutet darauf hin, dass Sie verlegt haben, Ihre Transaktion-Grenze.
Können Sie die persist Aufruf in eine private Methode und stellen die Methode Transaktions-statt der äußeren. Diese Methode akzeptieren konnten 500 Mitglieder zu einer Zeit, und dann Begehen wird, wenn er sich beendet.
Ja, das ist wahr.
InformationsquelleAutor Alex Barnes
Wenn Sie auf der Suche nach vorn zu Begehen Transaktionen in Ihrem anderen Transaktion, die Sie möglicherweise verwenden müssen
@Transactional (propagation = Propagation.REQUIRES_NEW)
Dies ist eine völlig getrennte
transaction
aber die Verbindung ist die gleiche. Prüfen Sie es für sich selbst. Ich könnte einen Fehler gemacht zu haben.InformationsquelleAutor Matin Kh
Alternative Strategie erstellen Sie eine Methode in DAO und Marke it @Transactional. Diese Methode wird tun, bulk-update(für zB 500 nos). So können Sie eine Methode mit code
Jedes mal, wenn Sie diese Methode aufrufen, es zu Begehen, nach 500 inserts/updates
Sorry. sollte das geklärt haben. Ich gebe Beispiel von spring mit hibernate und mit hibernateTemplate. Sie sind mit EntityManager, die mit JPA und verwenden können. Sie können dies tun, Session session = entityManager.unwrap(Session.class); Die Sitzung ist hibernate-session
InformationsquelleAutor vsingh