package org.hibernate.examples.mapping.property.localed; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import org.hibernate.annotations.*; import org.hibernate.examples.model.AbstractLocaleHibernateEntity; import org.hibernate.examples.utils.HashTool; import javax.persistence.*; import javax.persistence.Entity; import java.util.HashMap; import java.util.Locale; import java.util.Map; /** * 다국어 지원을 위해, Locale 별로 제목, 설명 속성을 관리하는 엔티티입니다. * * @author 배성혁 sunghyouk.bae@gmail.com * @since 2013. 12. 3. 오후 4:16 */ @Entity @org.hibernate.annotations.Cache(region = "example", usage = CacheConcurrencyStrategy.READ_WRITE) @DynamicInsert @DynamicUpdate @Getter @Setter public class SampleLocaleEntity extends AbstractLocaleHibernateEntity<Long, SampleLocaleValue> { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Setter(AccessLevel.PROTECTED) private Long id; private String title; private String description; /** * 지역화 정보를 담당합니다. */ @CollectionTable(name = "SampleLocaleEntityLocale", joinColumns = {@JoinColumn(name = "SampleLocaleEntityId")}) @MapKeyClass(Locale.class) @ElementCollection(targetClass = SampleLocaleValue.class, fetch = FetchType.EAGER) @Cascade({org.hibernate.annotations.CascadeType.ALL}) @LazyCollection(LazyCollectionOption.EXTRA) private Map<Locale, SampleLocaleValue> localeMap = new HashMap<Locale, SampleLocaleValue>(); @Override public Map<Locale, SampleLocaleValue> getLocaleMap() { return localeMap; } /** * Java에서는 실행 시 Generic 수형을 없애버립니다. * scala나 c#은 generic으로 인스턴스를 생성할 수 있지만, Java는 불가능합니다. * 그래서 이 값을 꼭 구현해 주셔야 합니다. * * @return TLocalVal 인스턴스 */ @Override public SampleLocaleValue createDefaultLocaleValue() { return new SampleLocaleValue(title, description); } @Override public int hashCode() { return HashTool.compute(title); } private static final long serialVersionUID = -5886227684015321943L; }