使用Spring JPA实体的多线程问题

时间:2018-11-25 17:45:09

标签: java multithreading hibernate jpa spring-data-jpa

我是新来的使用并发编程技术的人,想知道如果在多线程中执行以下流程是否会引起问题。

请考虑以下实体:

@Getter
@Setter
@Table(name = "CAR")
@Entity
public class Car {
    @Id
    private BigInteger id;
    @Column(name = "model")
    private String model;
}

存储库为:

@Service
public interface CarRepository extends JpaRepository<Car, BigInteger>{

}

我只是想知道两个线程是否同时处于同步方法中,是否有机会获得DuplicateKeyException?还是由于多线程而导致以下同步方法出现异常?

@Transactional
public void sync(final BigInteger id) {

    Car car = new Car(id, ....);

    Car someOtherCar = new Car(....);

    carRepository.save(car);

    carRepository.save(someOtherCar);

    carRepository.flush();

}

我尝试了以下代码进行测试,目的是将相同的汽车规格两次插入一个线程中,并且没有问题。

@Transactional
public void sync(final BigInteger id) {

    Car car = new Car(id, ....);
    Car sameCar = new Car(id, ....);

    carRepository.save(car);
    carRepository.save(sameCar);
    carRepository.flush();

}

请让我知道您对此的想法。谢谢

0 个答案:

没有答案