Life Developer
인생 개발자
[JPA]@Embeddable 문제점

만약

 

@Embedded
private Address homeAddress;

@Embedded
@AttributeOverrides({@AttributeOverride(name = "city", column = @Column(name = "city2")), @AttributeOverride(name = "zipcode", column = @Column(name = "zipcode2")),
@AttributeOverride(name = "street", column = @Column(name = "street2"))})
private Address workAddress;

 

이렇게 member 코드를 짜고

 

Address address = new Address("city", "street", "zipcode");

Member member1 = new Member();
member1.setUserName("member1");
member1.setHomeAddress(address);

em.persist(member1);

Address mAddress = new Address(address.getCity(),address.getStreet(),address.getZipcode());

Member member2 = new Member();
member2.setUserName("member2");
member2.setHomeAddress(mAddress);

em.persist(member2);

mAddress.setCity("new City");

 

이렇게 main으로 실행하면 같은 클래스를 바라보고 있지만 각각 변경이 가능하다.

 

객체는 주소값으로 저장하기 때문에 아예 객체를 하나 더 만들어서 set을 해주면 된다.

 

이렇게 안하면 값이 동시에 변경될수 있다.

 

참조를 막을수 있는 방법이 없다.

 

그래서 객체타입을 수정하지 못하게 만드는 방법으로 사용할수 있다.

 

불변객체로 만든다는 것이다.

 

생성자로 생성하고 setter 메서드에 private를 쓰던지 아예 setter를 안만들면 된다.

  Comments,     Trackbacks