Orphan Entity delete
@Test
@Transactional
@Rollback(value = false)
@DisplayName("연관관계 제거")
void test1() {
// 고객 Robbie 를 조회합니다.
User user = userRepository.findByName("Robbie");
System.out.println("user.getName() = " + user.getName());
// 연관된 음식 Entity 제거 : 후라이드 치킨
Food chicken = null;
for (Food food : user.getFoodList()) {
if(food.getName().equals("후라이드 치킨")) {
chicken = food;
}
}
if(chicken != null) {
user.getFoodList().remove(chicken);
}
// 연관관계 제거 확인
for (Food food : user.getFoodList()) {
System.out.println("food.getName() = " + food.getName());
}
}
이 코드를 보면 로비 고객을 조회하고 후라이드 치킨을 삭제합니다.
자세히 말하면 user.getFoodList().remove(chicken)
을 통해 컬렉션에서 삭제하는 것을 알 수 있습니다. 그래서 알아야 하는 것이 고아 엔티티 삭제입니다.

콘솔에서는 삭제된 것으로 나옵니다. 그러나
데이터베이스에서 후라이드 치킨은 건재하다는 것을 알 수 있습니다.
이는 컬렉션에서만 삭제하였기 떄문입니다.
그래서
@Entity
@Getter
@Setter
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "user", cascade = CascadeType.PERSIST, orphanRemoval = true) //고아 엔티티 삭제 설정
private List<Food> foodList = new ArrayList<>();
public void addFoodList(Food food) {
this.foodList.add(food);
food.setUser(this);// 외래 키(연관 관계) 설정
}
}
orphanRemoval = true
를 통해 데이터베이스에서 삭제할 수 있습니다.
코드를 실행해보면
콘솔에서도 잘 삭제 되어 나오고
데이터베이스에서도 잘 삭제가 되었습니다.
public class Excercise14_5 {
public static void main(String[] args) {
String[] strArr = { "aaa", "bb", "c", "dddd" };
int maxLength = 0;
for(String str : strArr) {
if(str.length() > maxLength) {
maxLength = str.length();
}
}
System.out.println("num : " + maxLength);
}
}