Java/SpringBoot

[Spring] JPA Select Join 일대일 일대다

고기고기물고기 2022. 10. 24. 13:22

해당 소스는 JPA로 SELECT Join 하는 예제를 구현하는 예제이다.

 

일대일, 일대다 구현하는 예제다. 일대일 , 일대다 조인 한 후 Where 절도 있는 예제다.

일대다 할경우 참조하는 id가 있어야 되는거 같다..

같은 문자코드로 참조 하려고 햇는데 잘되지 않는다 ㅠ

 

 

필자가 직접 해본거긴한데... 소스와 결과를 붙일수 없는 상황이라서.. 추후에 한번 더 해보면서 수정하겠습니다..

 

테이블구조

 

 - AdminMaster 

    id int

    serviceCode char 8

    serviceName varchar 50

    serviceManual varchar 4000

    serviceDept char 3

    serviceYn char 1

    uptDtm Datetime

    uptUsrid Varchar 16

 

 - AdminServiceInfo

    id int

    serviceGroup varchar 3

    servicePath varchar 1000

    serviceImage varchar 1000

    serviceGroupYn char 1

    adminMaster_id int

    uptUsrid varchar varchar 16

    uptDtm datetime

 

 - DeptMaster 

    serviceDept char 3

    deptName varchar 100

 

 

 

Entity

 - JoinAdminMasterEntity

@Data
@Entity
@Table(name = "AdminMaster")
public class JoinAdminMasterEntity {

	@Id
    private int id;
    
    private String serviceCode;
    private String serviceName;
    private String serviceManual;
    private String serviceDept;
    private String serviceYn;
    
    private String uptUsrid;
    private String uptDtm
    
    @OneToOne (optional = false, fetch = FetchType.LAZY)
    @JoinColumn (name = "serviceDept", insertable = false, updatable = false)
    private DeptMasterEntity deptMaster;
    
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST, orphanRemoval = true)
    
}

  - AdminServiceInfoEntity

@Data
@Entity
@Table(name = "AdminServiceInfo")
public class AdminServiceInfoEntity {

	@Column
    @Id
    private int id;
    
    private String serviceCode;
    @Column(length = 5)
    private String serviceGroup;
    @Column(length = 1000)
    private String servicePath;
    @Column(length = 1000)
    private String serviceImage;
    @Column(length = 1000)
    private String serviceGroupYn;
    private int adminMaster_id;
    @Column(length = 16)
    private String uptUsrid;
    private String uptDtm;
    
}

 

 

  - DeptMasterEntity

@Data
@Entity
@Table(name = "DeptMaster")
public class DeptMasterEntity {

	@Column
    @Id
    private String serviceDept;
    @Column(length = 100)
    private String deptName;
    
}

 

service

public interface AdminMasterService {

	public List<JoinAdminMasterEntity> getJoinAdminMasterList(String serviceGroup);
}

Impl

public class AdminMasterServiceImlp implements AdminMasterService {

	@Autowired
    private JoinAdminMasterRepository dao;
    
    @Override
    public List<JoinAdminMasterEntity> getJoinAdminMasterList(String serviceGroup) {
    	return dao.findAll(serviceGroup);
    }

}

 

Repository

public interface JoinAdminMasterRepository extends CrudRepository<JoinAdminMasterEntity, Long> {

	@Query("select distinct o from JoinAdminMasterEntity o " +
		"join fetch o.deptMaster join fetch o.adminServiceInfo t " +
        "where t.serviceGroup = :serviceGroup")
	List<JoinAdminMasterEntity> findAll(String serviceGroup);

}

 

 

controller

public class AdminMasterController {

    @Autowired
    private AdminMasterService service;

    @CrossOrigin(origins = "*")
    @GetMapping("/adminSelect")
    public List<JoinAdminMasterEntity> AdminSelect(@RequestParam String serviceGroup) {
    
    List<JoinAdminMasterEntity> adminmasterList = new ArrayList<>();
    adminmasterList = service.getJoinAdminMasterList(serviceGroup);
    
    return adminmasterList;

    }

}

@RequestParam = API 호출시 param 

localhost:9090/adminSelect?serviceGrouip=UAT