Spring 如何解决并发事务中的保存/持久化实体问题,处理并发请求的最佳方法是什么?
如何解决并发事务中的保存/持久化实体问题,处理并发请求的最佳方法是什么 遇到的问题是由于两个图书创建请求的并发性,两个实例都检查图书在开始时不存在,都尝试在数据库中创建图书,一个成功,另一个失败 假设我们有一个三列的表 表=书 列=ID、名称、作者Spring 如何解决并发事务中的保存/持久化实体问题,处理并发请求的最佳方法是什么?,spring,spring-boot,hibernate,jpa,spring-data-jpa,Spring,Spring Boot,Hibernate,Jpa,Spring Data Jpa,如何解决并发事务中的保存/持久化实体问题,处理并发请求的最佳方法是什么 遇到的问题是由于两个图书创建请求的并发性,两个实例都检查图书在开始时不存在,都尝试在数据库中创建图书,一个成功,另一个失败 假设我们有一个三列的表 表=书 列=ID、名称、作者 @NoRepositoryBean public class BookRepository implements IBookRepository { @Autowired ISpringJpaBookRepository s
@NoRepositoryBean
public class BookRepository implements IBookRepository
{
@Autowired
ISpringJpaBookRepository springJpaBookRepository;
@Override
public Book createBook(Book book) throws Exception {
BookEntity bookEntity = springJpaBookRepository.getByNameAndAuthor(book.getName(), book.getAuthor())
//Create a book entity and save
BookEntity bookEntity = createBook(getBookEntity(book));
bookEntity = springJpaBookRepository.save(bookEntity);
Book bookCreated = getBookFromEntity(bookEntity);
return bookCreated;
}
}
public class BookService implements IBookService
{
@Autowired
IBookRepository bookRepository;
@Override
@Transactional
public Book createBook(Book book) throws Exception {
bookRepository .createBook(Book book);
}
}
表对名称和作者列也有唯一的约束
CONSTRAINT uq_book UNIQUE(姓名、作者)
你说的“解决”是什么意思?我看没有问题。一次交易失败有什么问题?你们不可能做任何其他事情。@ChristianBeikov是的,你们是对的,需要修改这里的问题。假设我们在作者上有一个列LOCATION,我们在LOCATION列中保留类似“india/delhi/rohini”的条目,如果数据库中已经有“india/delhi/rohini”,我们不想添加“india/delhi”。但在并发请求中,它将在数据库中创建2个条目。如何避免这种情况?我不确定您的确切意思,但如何将列拆分为2个部分,并使包含国家/城市的部分唯一?