由于SERVICE_USER表不是纯联接表,而是具有其他功能字段(已阻止),因此您必须将其映射为实体,并将User和Service之间的多对多关联分解为两个OneToMany关联:一个用户有多个UserService,一个服务有许多UserServices。
您尚未向我们展示最重要的部分:实体之间关系的映射和初始化(即您遇到问题的部分)。因此,我将向您展示它的外观。
如果使关系是双向的,则应该具有
class User { @oneToMany(mappedBy = "user") private Set<UserService> userServices = new HashSet<UserService>();}class UserService { @ManyToOne @JoinColumn(name = "user_id") private User user; @ManyToOne @JoinColumn(name = "service_pre") private Service service; @Column(name = "blocked") private boolean blocked;}class Service { @oneToMany(mappedBy = "service") private Set<UserService> userServices = new HashSet<UserService>();}如果您不对关系进行任何级联,则必须坚持/保存所有实体。尽管仅必须初始化关系的拥有方(在此是UserService方),但是确保双方保持一致也是一种很好的做法。
User user = new User();Service service = new Service();UserService userService = new UserService();user.addUserService(userService);userService.setUser(user);service.addUserService(userService);userService.setService(service);session.save(user);session.save(service);session.save(userService);



