728x90
반응형
Entity의 필드값 변경은 Service 코드 내에서가 아니라 Entity 코드 내에 작성하는 것이 좋다. 왜냐하면 어떤 Entity를 여러 서비스에서 사용할 수 있기 때문이다.
예를들어, 다음과 같은 1: N 연관관계를 갖는 엔티티가 있다고 가정하자. General 엔티티에 Soldier 엔티티가 1 : N으로 연결되어 있다. 서비스코드에서 파라미터로 받아온 dto의 값들을 general 엔티티 내부의 soldier 엔티티의 필드값으로 Set하는 addSoldiers 메서드는, 서비스 코드에서 작성하는 것이 아니라 Entity 코드에서 작성한다.
이렇게 하면 makeArmyServiceImpl 코드에서 뿐만 아니라, 다른 Service 코드에서도 addSoldiers 메서드를 활용할 수 있게 된다. 그리고, 다른 패키지에있는 다른 Service에서 makeArmyServiceImpl이 포함된 파일을 참조하지 않으므로 독립성도 유지할 수 있게 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
//엔티티 코드
@Entity
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "general")
public class GeneralEntity {
//엔티티 관계 설정
@OneToMany(fetch=FetchType.LAZY, mappedBy="general")
private List<SoliderEntity> soldiersEntity;
//setGeneralEntity
public addSoldiers(dto) {
List<SoliderEntity> soldiers = this.soldiersEntity; //서비스 코드에서 기준잡은 generalEntity가 this
for(SoliderEntity soldier : soldiers) {
soldier.setName(dto.soldierName)
soldier.setWeapon(dto.weapon)
...
}
}
//서비스 코드
@Overried
@Transactional
public makeArmyServiceImpl(GeneralEntity generalEntity) {
generalEntity.addSoliers(dto);
...
}
|
cs |
728x90
반응형
'Programming-[Backend] > SpringBoot' 카테고리의 다른 글
[TIL] Mapstruct - @Mapping 시 List의 필드값, the type of parameter has no property named (0) | 2021.09.13 |
---|---|
[링크][중요] Mapstruct 라이브러리, DTO와 Entity 검증의 주체가 되야하는 부분 (0) | 2021.09.12 |
[TIL] Unique Id 아닌 값을 바탕으로 조회 및 update 할 때, findTopBy (0) | 2021.06.29 |
[TIL] @JsonNaming 으로 Camel Case 필드값 Snake Case로 자동변환 (0) | 2021.06.21 |
[TIL] @JsonFormat으로 @DateTimeFormat 대신 Date까지만 받기 (0) | 2021.06.16 |