Java 使用@Transactional annotated method,@ManyToMany关系-hibernate填充连接表,即使在保存非所属实体时也是如此

Java 使用@Transactional annotated method,@ManyToMany关系-hibernate填充连接表,即使在保存非所属实体时也是如此,java,hibernate,spring-data-jpa,many-to-many,Java,Hibernate,Spring Data Jpa,Many To Many,我有两个具有@manytomy关系的实体 @Entity public class User { ... @ManyToMany @JoinTable(name = "user_car", joinColumns = { @JoinColumn(name = "fk_user") }, inverseJoinColumns = { @JoinColumn(name = "fk_car") })

我有两个具有@manytomy关系的实体

@Entity
public class User {
...
 @ManyToMany
 @JoinTable(name = "user_car",
          joinColumns = { @JoinColumn(name = "fk_user") },
          inverseJoinColumns = { @JoinColumn(name = "fk_car") })
    private List<Car> cars = new ArrayList<>();
...
}
@Entity
public class Car {
...
 @ManyToMany(mappedBy = "cars")
 private List<User> users = new ArrayList<User>();
...
}

@SpringBootApplication
public class HibernateApplication implements CommandLineRunner {
    @Autowired
    UserRepository userRepository;

    @Autowired
    CarRepository carRepository;

    public static void main(String[] args) {
        SpringApplication.run(HibernateApplication.class, args);
    }

    @Override
    @Transactional
    public void run(String... args) {
        User first = new User("first");
        User second = new User("second");
        userRepository.save(first);
        userRepository.save(second);

        Car vw = createCar("VW");
        Car skoda = createCar("skoda");
        carRepository.save(vw);
        carRepository.save(skoda);

        first.getCars().add(vw);
        first.getCars().add(skoda);
        second.getCars().add(skoda);

        vw.getUsers().add(first);
        skoda.getUsers().add(first);
        skoda.getUsers().add(second);

        carRepository.save(vw);
        carRepository.save(skoda);
    }

    private Car createCar(String model) {
        Car car = new Car();
        car.setModel(model);
        return car;
    }