Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何解决并发事务中的保存/持久化实体问题,处理并发请求的最佳方法是什么?_Spring_Spring Boot_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Spring 如何解决并发事务中的保存/持久化实体问题,处理并发请求的最佳方法是什么?

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

如何解决并发事务中的保存/持久化实体问题,处理并发请求的最佳方法是什么

遇到的问题是由于两个图书创建请求的并发性,两个实例都检查图书在开始时不存在,都尝试在数据库中创建图书,一个成功,另一个失败

假设我们有一个三列的表

表=书 列=ID、名称、作者

@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个部分,并使包含国家/城市的部分唯一?