package kr.debop4j.data.mapping.model.annotated.join; import com.google.common.base.Objects; import kr.debop4j.core.tools.HashTool; import kr.debop4j.data.model.AnnotatedEntityBase; import lombok.Getter; import lombok.Setter; import org.hibernate.annotations.Generated; import org.hibernate.annotations.GenerationTime; import javax.persistence.*; import java.util.Date; /** * org.annotated.mapping.domain.model.join.JpaJoinCustomer * * @author 배성혁 ( sunghyouk.bae@gmail.com ) * @since 12. 12. 4. */ @Entity @Table(name = "JPA_JOIN_CUSTOMER") @SecondaryTable(name = "JPA_JOIN_CUSTOMER_ADDR", pkJoinColumns = @PrimaryKeyJoinColumn(name = "CUSTOMER_ID")) @Getter @Setter public class JpaJoinCustomer extends AnnotatedEntityBase { private static final long serialVersionUID = 6609847114968580068L; @Id @GeneratedValue @Column(name = "CUSTOMER_ID") private Long id; @Column(name = "CUSTOMER_NAME") private String name; @Column(name = "CUSTOMER_EMAIL") private String email; @Embedded @AttributeOverrides( { @AttributeOverride(name = "street", column = @Column(name = "STREET", table = "JPA_JOIN_CUSTOMER_ADDR")), @AttributeOverride(name = "zipcode", column = @Column(name = "ZIPCODE", table = "JPA_JOIN_CUSTOMER_ADDR")), @AttributeOverride(name = "city", column = @Column(name = "CITY", table = "JPA_JOIN_CUSTOMER_ADDR")), } ) private JpaJoinAddress joinAddress = new JpaJoinAddress(); // Generated 는 DB에서 값을 관리하므로, Hibernate에서 특정 작업 후 그 값을 갱신하도록 refresh를 강제화한다는 뜻이다. // MySqlUpdatedTimestamp, MySqlUpdatedTimestamp 를 참고하여, DB 컬럼에 정의해줘야 한다. @Generated(GenerationTime.INSERT) @Column(name = "CREATED_TIME", insertable = false, updatable = false) @Temporal( TemporalType.TIMESTAMP ) //@Setter(AccessLevel.PROTECTED) private Date created; @Generated(GenerationTime.ALWAYS) @Column(name = "UPDATED_TIME", insertable = false, updatable = false) @Temporal( TemporalType.TIMESTAMP ) //@Setter(AccessLevel.PROTECTED) private Date lastUpdated; @Override public int hashCode() { if (isPersisted()) return HashTool.compute(id); return HashTool.compute(name); } @Override protected Objects.ToStringHelper buildStringHelper() { return super.buildStringHelper() .add("id", id) .add("name", name) .add("email", email); } }