无法为实体设置 ManyToOne OneToMany,具有双重持久性

Can't set ManyToOne OneToMany for entities, have double persistance

@Entity
public class Room {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToMany(mappedBy = "Room", fetch = FetchType.EAGER)
    private List<SponsorStart> sponsorsStart = new ArrayList<>();
//getters setters
@Entity
@Table(name = "sponsors_start")
public class SponsorStart {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column
    private String username;
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "room_id")
    private Room Room;
@Repository
public interface RoomRepository extends CrudRepository<Room, Long> {

}

From RoomServiceImpl save:
  @Override
    public Room saveRoom(Room Room) {
        return roomRepository.save(Room);
    }

我的行为顺序是什么?

1. List<SponsorStart> sponsorStarts = new ArrayList<>();
2. Room room = new Room();
3. giveRoom.setSponsorsStart(sponsorStarts); //set list of sponsors form p.1
4. giveRoomService.saveRoom(room); //save room

并且sponsors_start 数据库是空的。 我尝试先从列表中保存每个 sposorStart,但它们在 room_id 列中保存为 null。 抱歉,我知道这应该很简单,但就我而言,我做错了什么。 谢谢!

  1. 您应该将 cascade=CascadeType.ALL 移动到您协会的 @OneToMany 一侧:
@OneToMany(mappedBy = "Room", fetch = FetchType.EAGER, cascade=CascadeType.ALL)
private List<SponsorStart> sponsorsStart = new ArrayList<>();
  1. 您应该同步双向关联的两端:
List<SponsorStart> sponsorStarts = new ArrayList<>();
SponsorStart sponsorStart1 = new SponsorStart();
sponsorStarts.add(sponsorStart1);
// ...

Room room = new Room();

// sync both side of the association
sponsorStart1.setRoom(room);
room.setSponsorsStart(sponsorStarts); //set list of sponsors form p.1
room.saveRoom(room); //save room

另请参阅休眠文档的 this part