【问题标题】:Spring JPA: How to insert data to join many tables with @ManytoMany relationshipSpring JPA:如何插入数据以使用@ManytoMany 关系连接多个表
【发布时间】:2018-12-03 14:38:56
【问题描述】:

我开始学习 Spring Java 框架。我创建了一些实体来加入 2 模型,比如我的数据库。现在我想通过 JpaRepository 插入加入表。我必须做什么? 这是我的代码(如果有问题,请帮我修复)

模型 Users_RoomId 来定义复合主键

@Embeddable
public class Users_RoomId implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "ID_room", nullable = false)
private String idRoom;
 @Column(name = "user_id", nullable = false)
 private int idUser;

}

模型 Users_Room 加入 2 个模型用户和房间

@Entity
@Table(name ="bookroom")
public class Users_Room {
 @EmbeddedId
 private Users_RoomId usersroomId;

 @ManyToOne
 @MapsId("idRoom")
 private Room room;

 @ManyToOne
 @MapsId("idUser")
 private Users users;

 @Column(name = "Bookday")
 private String bookday;

Model Users 和 Room 我使用注解 @OneToMany

模型用户

@Entity
@Table(name = "users")
public class Users  implements Serializable{
 private static final long serialVersionUID = 1L;
 @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "user_id", nullable = false)
    private int id;


    @Column(name = "name", nullable = false)
    private String name;


    @Column(name = "email")
    private String email;

    @Column(name = "pass")
    private String pass;

    @Column(name = "role")
    private int role;

    @OneToMany(mappedBy = "users")
    private List<Users_Room> user;

样板间

@Entity
@Table(name ="room")
public class Room implements Serializable {
 private static final long serialVersionUID = 1L;
 @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ID_room", nullable = false)
    private String id;


    @Column(name = "name_room", nullable = false)
    private String name;


    @Column(name = "Description")
    private String describe;

    @ManyToOne
    @JoinColumn(name = "ID_status")
    private Status status;

    @Column(name = "room_image")
    private String image;


    public Room() {
        super();
    }

    @ManyToOne
    @JoinColumn(name = "ID_kind")
    private KindRoom kind;


    @OneToMany(mappedBy = "room")
    private List<Users_Room> rooms;

这是我的数据库

所以我不知道如何使用 JPA 存储库插入一个带有 iduser、idroom 和 bookday 的新书房。在 JPARepository 中编写查询是必要的,或者我们只需要使用方法 save() 来插入数据

谢谢大家

【问题讨论】:

  • @JensSchauder 感谢您的评论。但是您的文档只与单个表格有关。我想做连接表
  • 这不是您在问题中提出的问题。由于还没有答案,请编辑问题以实际询问您想知道的内容。请说明您尝试了什么以及失败的原因。
  • 有人可以帮助我T.T

标签: spring jpa spring-data-jpa many-to-many


【解决方案1】:

我有同样的问题,并用下面的代码解决了。我使用方法 save() 插入数据。以下代码是“RoomService.java”中的“createRoom”方法。

RoomService.java

private final RoomRepository roomRepository;
private final UserRoomRepository userRoomRepository;
private final UserRepository userRepository;

public RoomService(RoomRepository roomRepository, UserRoomRepository userRoomRepository, UserRepository userRepository) {
    this.roomRepository = roomRepository;
    this.userRoomRepository = userRoomRepository;
    this.userRepository = userRepository;
}

@Transactional
public RoomDto createRoom(Long userId, Long chattingUserId) {
    Room room = roomRepository.save(new Room());

    room.addUserRoom(userRepository.findById(userId).orElseThrow(()->new NoSuchElementException("No User")));
    room.addUserRoom(userRepository.findById(chattingUserId).orElseThrow(()->new NoSuchElementException("No User")));
    userRoomRepository.save(new UserRoom(userRepository.findById(userId).orElseThrow(()->new NoSuchElementException("No User")),room));
    userRoomRepository.save(new UserRoom(userRepository.findById(chattingUserId).orElseThrow(()->new NoSuchElementException("No User")),room));

    RoomDto roomDto = RoomDto.of(room);
    return roomDto;
}

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2014-11-15
    相关资源
    最近更新 更多