KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I found some strange behavior when using nested Spring transactions: when, in the same class, a method annotated as @Transactional calls another method also annotated as @Transactional the second annotation is not used. Let's consider the following class: public class Main { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); final Main main = context.getBean(Main.class); // First Op System.out.println("Single insert: " + main.singleInsert()); // Second Op main.batchInsert(); // Third Op main.noTransBatchInsert(); } @PersistenceContext private EntityManager pm; @Transactional(propagation=Propagation.REQUIRED) public void batchInsert() { System.out.println("batchInsert"); System.out.println("First insert: " + singleInsert()); System.out.println("Second insert: " + singleInsert()); } public void noTransBatchInsert() { System.out.println("noTransBatchInsert"); System.out.println("First insert: " + singleInsert()); System.out.println("Second insert: " + singleInsert()); } @Transactional(propagation=Propagation.REQUIRES_NEW) public int singleInsert() { System.out.println("singleInsert"); Pojo p = new Pojo(); pm.persist(p); return p.getId(); } } The entity if the following class: @Entity public class Pojo { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; @Override public String toString() { return "Pojo: " + id; } public int getId() { return id; } } and the String parts applicationContext.xml: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="h
Tags (comma-separated)
Save Edits
Cancel