如何解决使用@Transactional带注释的方法,@ManyToMany关系-即使保存非所有权实体,休眠也会填充连接表
我有两个具有@ManyToMany关系的实体。
@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>();
...
}
它有两个存储库接口,它们只是为用户和课程车扩展了JpaRepository。
所以,我想知道为什么在运行方法上使用@Transactional批注时,会创建连接表中的行,而没有该批注的行就不是吗?
此外,很明显,用户拥有关系,因此在运行方法结束时使用userRepository.save(first)和userRepository.save(second)代替了carRepository.save(vw)和carRepository.save(skoda)行仍然会创建。
仅出于测试目的:
@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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。