Which of the following examples will work correctly and keep our data consistent? Pay attention to the access modifiers of the methods.
Java
-
@Transactional private void doTransaction() { var person = new Record(); person.setName("Mike"); repository.save(person); if (person.getId() > 0) { throw new RuntimeException(); } person.setName("Bob"); repository.save(person); } -
public void doTransaction() { var person = new Record(); person.setName("Mike"); repository.save(person); @Transactional if (person.getId() > 0) { throw new RuntimeException(); } person.setName("Bob"); repository.save(person); } -
@Transactional(readOnly = false) public void doTransaction() { var person = new Record(); person.setName("Mike"); repository.save(person); if (person.getId() > 0) { throw new RuntimeException(); } person.setName("Bob"); repository.save(person); } -
@Transactional(readOnly = true) public void doTransaction() { var person = new Record(); person.setName("Mike"); repository.save(person); if (person.getId() > 0) { throw new RuntimeException(); } person.setName("Bob"); repository.save(person); }
Kotlin
-
@Transactional private fun doTransaction() { val person = Record() person.name = "Mike" repository.save(person) if (person.getId() > 0) { throw RuntimeException() } person.name = "Bob" repository.save(person) } -
fun doTransaction() { val person = new Record(); person.name = "Mike" repository.save(person) @Transactional if (person.getId() > 0) { throw RuntimeException() } person.name = "Bob" repository.save(person); } -
@Transactional(readOnly = false) fun doTransaction() { val person = Record() person.name = "Mike" repository.save(person) if (person.getId() > 0) { throw RuntimeException() } person.name = "Bob" repository.save(person) } -
@Transactional(readOnly = true) fun doTransaction() { val person = Record() person.name = "Mike" repository.save(person) if (person.getId() > 0) { throw RuntimeException() } person.name = "Bob" repository.save(person) }