본문 바로가기

카테고리 없음

@OneToMany, @ManyToOne / @ManyToMany

 

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;
    // 기타 수정이 필요한 필드들
}