package org.hibernate.examples.mapping.property.enumerated; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.hibernate.examples.model.AbstractHibernateEntity; import org.hibernate.examples.utils.HashTool; import javax.persistence.*; /** * Enum 값 하나만을 표현하는 예제. * 복수의 Enum 값을 가지는 경우 C#에서는 @flags 를 쓰지만, java에서는 EnumSet을 사용해야 합니다. * * @author 배성혁 sunghyouk.bae@gmail.com * @since 2013. 12. 3. 오후 1:56 */ @Entity @org.hibernate.annotations.Cache(region = "example", usage = CacheConcurrencyStrategy.READ_WRITE) @DynamicInsert @DynamicUpdate @Getter @Setter public class EnumeratedEntity extends AbstractHibernateEntity<Integer> { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Setter(AccessLevel.PROTECTED) private Integer id; // Enumerated 를 쓰면 Enum 값을 원하는 Ordinal 수형으로 DB에 저장하고, 반환받을 수 있다. 대부분 String 을 사용한다. @Enumerated(EnumType.ORDINAL) @Column(name = "OrdinalValue", nullable = false) private OrdinalEnum intValue = OrdinalEnum.Third; // Enumerated 를 쓰면 Enum 값을 원하는 수형으로 DB에 저장하고, 반환받을 수 있다. 대부분 String 을 사용한다. @Enumerated(EnumType.STRING) @Column(name = "StringValue", nullable = false) private StringEnum stringValue = StringEnum.Decimal; @Override public int hashCode() { return HashTool.compute(intValue, stringValue); } private static final long serialVersionUID = 4071809720463913052L; }