1. 중간 테이블에서 fk값만 구하려면 @ManyToMany 사용
2. 중간 테이블에서 추가적인 값을 구하려면 @OneToMany, @ManyToOne사용해서 추가 필드 작성 가능
1번 --> User,Project Entity에서는 @OneToMany를 각각 작성해주고,
UserProjectMap 중간 테이블에서는 @ManyToOne을 2번(각 테이블에 맞게) 작성 해줘야 함.
manytomany는 바로 save로 저장 가능하지만,
2번과 같이 설정하면 객체를 생성해서, 객체에 정보를 업데이트 한 후, 해당 변수를 저장해줘야함
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// User와 UserProject의 1:N 관계
@OneToMany(mappedBy = "user")
private List<UserProject> userProjects = new ArrayList<>();
// Constructors, Getters, Setters
}
----------------------------------------------------------------------
@Entity
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
// Project와 UserProject의 1:N 관계
@OneToMany(mappedBy = "project")
private List<UserProject> userProjects = new ArrayList<>();
// Constructors, Getters, Setters
}
----------------------------------------------------------------------
@Entity
public class UserProject {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 추가 정보 필드 (예: 역할, 참여 일자)
private String role;
private LocalDate joinedDate;
// User와의 N:1 관계
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
// Project와의 N:1 관계
@ManyToOne
@JoinColumn(name = "project_id")
private Project project;
// Constructors, Getters, Setters
}
2번 예시
@Entity
public class User {
@Id
private Long id;
@OneToMany(mappedBy = "user")
private List<UserDeviceMap> userDeviceMaps;
}
@Entity
public class Device {
@Id
private Long id;
@OneToMany(mappedBy = "device")
private List<UserDeviceMap> userDeviceMaps;
}
@Entity
public class UserDeviceMap {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToOne
@JoinColumn(name = "device_id")
private Device device;
// 추가 필드
private String status;
private LocalDate assignedDate;
// 기타 수정이 필요한 필드들
}