final Member member = new Member();
member.setUsername("member1");
member.setHomeAddress(new Address("homeCity", "street", "100"));
member.getFavoriteFoods().add("치킨");
member.getFavoriteFoods().add("족발");
member.getFavoriteFoods().add("피자");
member.getAddressHistory().add(new Address("old1", "street", "1000")); // 1
member.getAddressHistory().add(new Address("old2", "street", "1000"));
em.persist(member);
em.flush();
em.clear();
System.out.println("======START=====");
final Member findMember = em.find(Member.class, member.getId());
final Address a = findMember.getHomeAddress();
findMember.setHomeAddress(new Address("newCity", a.getStreet(), a.getZipcode()));
findMember.getFavoriteFoods().remove("치킨");
findMember.getFavoriteFoods().add("한식");
findMember.getAddressHistory().remove(new Address("old1", "street", "1000")); // 2
tx.commit();
주석으로 1과 2가 표시 되어있는 곳을 보면 위에서 add해줬던걸 나중에 그대로 remove를 시키려고한다. 현재 Address클래스에는 equals(), hashcode()를 오버라이딩 하고 있다. 그런데 만약 equals(), hashcode()를 오버라이딩 하지 않았다면?
remove하려는 값을 찾지 못하고 실제로 db의 데이터도 삭제되지 않는다. equals()로 동등 비교 할 수있게 만들어 놓고 사용하도록 하자.