package org.hibernate.examples.mapping.embeddable;
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 org.hibernate.examples.utils.ToStringHelper;
import javax.persistence.*;
/**
* org.hibernate.examples.mapping.embeddable.User
*
* @author 배성혁 sunghyouk.bae@gmail.com
* @since 2013. 11. 30. 오후 12:33
*/
@Entity
@Table(name = "Embeddable_User", indexes = {@Index(name = "ix_embeddable_user_username", columnList = "username, password"),
@Index(name = "ix_user_email", columnList = "UserEmail")})
// index 에 순서를 주려면 hibernate의 Table annotation을 이용해야 합니다.
@org.hibernate.annotations.Table(appliesTo = "Embeddable_User")
@org.hibernate.annotations.Cache(region = "example", usage = CacheConcurrencyStrategy.READ_WRITE)
@DynamicInsert
@DynamicUpdate
@Getter
@Setter
class User extends AbstractHibernateEntity<Long> {
protected User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "userId")
@Setter(AccessLevel.PROTECTED)
private Long id;
private String firstname;
private String lastname;
@Column(length = 128, nullable = false)
private String username;
@Column(length = 64, nullable = false)
private String password;
@Column(name = "UserEmail")
private String email;
@Column(name = "IS_ACTIVE", nullable = false)
private Boolean active = true;
@Basic(fetch = FetchType.LAZY)
private String exAttrs;
@Embedded
@AttributeOverrides(
{
@AttributeOverride(name = "street", column = @Column(name = "HomeStreet", length = 128)),
@AttributeOverride(name = "zipcode", column = @Column(name = "HomeZipCode", length = 24)),
@AttributeOverride(name = "city", column = @Column(name = "HomeCity", length = 128))
}
)
private Address homeAddress = new Address();
@Embedded
@AttributeOverrides(
{
@AttributeOverride(name = "street", column = @Column(name = "OfficeStreet", length = 128)),
@AttributeOverride(name = "zipcode", column = @Column(name = "OfficeZipCode", length = 24)),
@AttributeOverride(name = "city", column = @Column(name = "OfficeCity", length = 128))
}
)
private Address officeAddress = new Address();
@Override
public int hashCode() {
return HashTool.compute(username, password);
}
@Override
public ToStringHelper buildStringHelper() {
return super.buildStringHelper()
.add("firstname", firstname)
.add("lastname", lastname)
.add("username", username)
.add("userpwd", password)
.add("userEmail", email)
.add("homeAddress", homeAddress)
.add("officeAddress", officeAddress);
}
private static final long serialVersionUID = -5638782007660883773L;
}