@Id
컬럼에 대해서는 Converter 사용이 불가하다(JPA 명세에 불가하다고 나옴). Hibernate User Type 사용해야 할 것 같다.@Converter public class PersonNameConverter implements AttributeConverter<PersonName, String> { @Override public String convertToDatabaseColumn(PersonName personName) { // object to DB column 구현 } @Override public PersonName convertToEntityAttribute(String dbPersonName) { // DB column to object 구현 } @Entity(name = "PersonTable") public class Person { @Convert(converter = PersonNameConverter.class) private PersonName personName; // ... }
AttributeConverter
의 컨버팅 대상이 되는 클래스에 equals
, hashCode
메소드를 명확히 구현할 것.equals
로 비교한다. 따라서 equals/hashCode
가 복사시마다 달라지는 경우에 문제 소지가 있다.equals
를 보고서 dirty checking 을 하는데, equals
가 제대로 구현 안돼 있으면 false
가 나오고 그로인해 entity 전체에 대한 update 가 발생한다.equals
/hashCode
를 구현해야 한다. 그렇지 않으면 모르는 사이에 지속적으로 update가 발생하게 된다.Serializable
을 구현하면서 Hibernate가 무조건 VARBINARY
로 매핑하는 버그가 있다(현재 5.2.x 버전도 마찬가지)@Convert(converter=ISBNConverter.class) @org.hibernate.annotations.Type(type="string") private ISBN isbn;