下面列出了org.springframework.transaction.annotation.Propagation#NESTED 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
@Transactional(propagation = Propagation.NESTED, readOnly = true)
public String getPetsAsHtml(User owner) {
Set<Pet> pets = petRepo.findByOwner(owner);
if(pets.isEmpty()) {
return "<p>User " + owner.getUsername() + " has no pets.</p>\n";
}
StringBuilder htmlSb = new StringBuilder("User " + owner.getUsername() + " has:\n");
for (Pet pet : pets) {
htmlSb.append("<p>Name: " + pet.getName() + ", type: " + pet.getPetType() + ", Age: " + pet.getAge() +"</p></br>\n");
}
return htmlSb.toString();
}
@Override
@Transactional(propagation = Propagation.NESTED, readOnly = true)
public String getPetsAsHtml(User owner) {
Set<Pet> pets = petRepo.findByOwner(owner);
if(pets.isEmpty()) {
return "<p>User " + owner.getUsername() + " has no pets.</p>\n";
}
StringBuilder htmlSb = new StringBuilder("User " + owner.getUsername() + " has:\n");
for (Pet pet : pets) {
htmlSb.append("<p>Name: " + pet.getName() + ", type: " + pet.getPetType() + ", Age: " + pet.getAge() +"</p></br>\n");
}
return htmlSb.toString();
}
/**
* PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
*/
@Transactional(propagation=Propagation.NESTED)
public void insertNested(PersonDto person, boolean throwException) {
personDao.insert(person);
try {
System.out.println("xxxxxxxWAITING************");
Thread.sleep(10000);
}catch(Exception e) {
}
if(throwException) {
throw new RuntimeException("ERROR");
}
}
@Test
@Transactional(propagation = Propagation.NESTED)
public void testUpdate() {
cityService.createCities(5);
City city = CityHelper.getSingleCity();
city.setCityId(CityHelper.CITY_ID_PREFIX + 2);
cityService.updateCity(CityHelper.CITY_ID_PREFIX + 2);
City city2 = cityService.getById(CityHelper.CITY_ID_PREFIX + 2);
assertThat(city2, is(city));
}
@Test
@Transactional(propagation = Propagation.NESTED)
public void testDelete() {
cityService.createCities(5);
cityService.deleteCityByIds(CityHelper.getMultipleCityIds(2));
List<City> cities = cityService.getAll();
assertThat(cities.size(), is(3));
}
@Test
@Transactional(propagation = Propagation.NESTED)
public void testUpdate() {
studentService.createStudents(5);
Student student = StudentHelper.getSingleStudent();
student.setStudentId(StudentHelper.STUDENT_ID_LAST + 2);
studentService.updateStudent(StudentHelper.STUDENT_ID_LAST + 2);
Student student2 = studentService.getById(StudentHelper.STUDENT_ID_LAST + 2);
assertThat(student2, is(student));
}
@Test
@Transactional(propagation = Propagation.NESTED)
public void testDelete() {
studentService.createStudents(5);
studentService.deleteStudentByIds(StudentHelper.getMultipleStudentIds(2));
List<Student> students = studentService.getAll();
assertThat(students.size(), is(3));
}
@Test
@Transactional(propagation = Propagation.NESTED)
public void testDeleteAll() {
//studentService.createStudents(5);
studentService.deleteAll();
List<Student> students = studentService.getAll();
assertThat(students.size(), is(0));
}
@Transactional(rollbackFor = Exception.class, propagation = Propagation.NESTED)
public void test1() {
System.out.println("test1 run...");
// int i = 1 / 0;
System.out.println("test1 finish...");
}
@Override
@Transactional(propagation = Propagation.NESTED)
public void addNested(User2 user){
user2Mapper.insert(user);
}
@Override
@Transactional(propagation = Propagation.NESTED)
public void addNestedException(User2 user){
user2Mapper.insert(user);
throw new RuntimeException();
}
@Override
@Transactional(propagation = Propagation.NESTED)
public void addNested(User1 user){
user1Mapper.insert(user);
}
@Override
@Transactional(propagation = Propagation.NESTED)
public void addNestedException(User1 user){
user1Mapper.insert(user);
throw new RuntimeException();
}
@Override
@Transactional(propagation = Propagation.NESTED,readOnly=true)
public User1 getNested(Integer id){
return user1Mapper.selectByPrimaryKey(id);
}
@Override
@Transactional(propagation = Propagation.NESTED)
public void addNested(User2 user){
user2Mapper.insert(user);
}
@Override
@Transactional(propagation = Propagation.NESTED)
public void addNestedException(User2 user){
user2Mapper.insert(user);
throw new RuntimeException();
}
@Override
@Transactional(propagation = Propagation.NESTED)
public void addNested(User1 user){
user1Mapper.insert(user);
}
@Override
@Transactional(propagation = Propagation.NESTED)
public void addNestedException(User1 user){
user1Mapper.insert(user);
throw new RuntimeException();
}
@Transactional(propagation = Propagation.NESTED)
public void doNothingUnsupportedPropagation() {
// This method does nothing, but should fail anyway because of the unsupported
// propagation.
}