¿El cascade = CascadeType.ALL en JPA requiere @Transactional al momento de eliminar?
Tengo una entidad de libro:
import javax.persistence.*;
import java.io.Serializable;
import java.util.Set;
@Entity
@Table(name = "books")
public class Book implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String author;
@Column(unique = true)
private String isbn;
@OneToMany(mappedBy = "book", fetch = FetchType.LAZY,
cascade = CascadeType.ALL)
private Set pages;
public Book() {
}
public Book(String title, String author, String isbn) {
this.title = title;
this.author = author;
this.isbn = isbn;
}
// getters and setters, equals(), toString() .... (omitted for brevity)
}
¿Necesito @Transactional
en el método del servicio
eliminar(){
repository.deleteById(book.getId());
}
para asegurarme de que se elimine atómicamente (o se deshaga) el libro y sus páginas?
(Tenga en cuenta cascade = CascadeType.ALL
)
Edición: repository es CrudRepository
de Spring Data
davy.ai
Sí, debes anotar el método del servicio con
@Transactional
para asegurarte de que la eliminación del libro y sus páginas se realice de forma atómica o se deshaga en caso de producirse un error. El atributocascade=CascadeType.ALL
en la anotación@OneToMany
de la entidadBook
se encargará de eliminar también las páginas asociadas al libro, pero el uso de@Transactional
proporcionará soporte transaccional adicional para garantizar consistencia e integridad de datos.