I am using Spring 3, JPA + Hibernate for a CMS
application. In that application I have a service class method which is annotated with @Transactional
Annotation with rollBack
property. Inside that method I am inserting data (ie entity classes) to a table using a loop. For each iteration
of the loop entity classes has to be saved to the database. But it is not happening. The commit only happens when the execution of the loop has completed and exits from the method. Then it commits and saves all at once. But I need to read data once it gets inserted into the database before committing in this case. I tried with the ISOLATION LEVEL
to read uncommitted but it didn't supported since I am using the default JPADialect
. Also tried to add the hibernate implementation of jpaDialect
but still it didn't worked. Please help with a workaround for this problem. One more thing, is there any way using propagation required method.
You are right, this is what I
stands for in acid. Because the transactions are working in isolation, other transactions cannot see them before they are committed. But playing with isolation levels is a bad practice. I would rather advice you to run each and every iteration in a separate transaction with start and commit inside.
This is a bit tricky in Spring, but here is an example:
public void batch() {
for(...) {
insert(...)
}
}
//necessarily in a different class!
@Transactional
public void insert() {
}
Note that batch()
is not annotated with @Transactional
and insert()
has to be in a different class (Spring service). Too long to comment, but that's life. If you don't like it, you can use TransactionTemplate
manually.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With