사용자 도구

사이트 도구


java:hibernate:annotations

Hibernate Annotations

CRUD 쿼리 직접 지정

@Entity
@Table(name="CHAOS")
@SQLInsert( sql="INSERT INTO CHAOS(size, name, nickname, id) VALUES(?,upper(?),?,?)") @SQLUpdate( sql="UPDATE CHAOS SET size = ?, name = upper(?), nickname = ? WHERE id = ?") @SQLDelete( sql="DELETE CHAOS WHERE id = ?") @SQLDeleteAll( sql="DELETE CHAOS") @Loader(namedQuery = "chaos")
@NamedNativeQuery(name="chaos", query="select id, size, name, lower( nickname ) as nickname from CHAOS where id= ?", resultClass = Chaos.class)
public class Chaos {
    @Id
    private Long id;
    private Long size;
    private String name;
    private String nickname;
  • @Loader:
    • Entity 단건 SELECT 에 대한 쿼리를 HQL, Native Query로 지정할 수 있다.
    • namedQuery로 만들어 놓고, 그 nameQuery 이름을 지정해준다.
  • @SQLInsert,, @SQLUpdate, @SQLDelete, @SQLDeleteAll
  • SQL 파라미터의 순서가 매우 중요하다. 위 어노테이션들을 지정하기 전에 먼저 org.hibernate.persister.entity Log Level을 DEBUG로 지정하고 보면 하이버네이트가 생성한 SQL과 파라미터 순서를 볼 수 있는데, 이와 똑 같은 순서로 SQL 파라미터를 지정해야 한다.
  • Secondary Table에 대한 지정
@Entity
@SecondaryTables({
    @SecondaryTable(name = "`Cat nbr1`"),
    @SecondaryTable(name = "Cat2"})
@org.hibernate.annotations.Tables( {
    @Table(appliesTo = "Cat", comment = "My cat table" ),
    @Table(appliesTo = "Cat2", foreignKey = @ForeignKey(name="FK_CAT2_CAT"), fetch = FetchMode.SELECT,
        sqlInsert=@SQLInsert(sql="insert into Cat2(storyPart2, id) values(upper(?), ?)") )
} )
public class Cat implements Serializable {
  • Join Column에 대한 지정
@OneToMany
@JoinColumn(name="chaos_fk")
@SQLInsert( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = ? where id = ?") @SQLDelete( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = null where id = ?")
private Set<CasimirParticle> particles = new HashSet<CasimirParticle>();

@org.hibernate.annotations.ForeignKey

  • Deprecated. JPA 2.1 에서 부터 @JoinColumn(foreinKey=@ForeinKey…) 표준이 생겨서 더이상 이 애노테이션은 불필요하다.
  • @org.hibernate.annotations.ForeignKey(name=“fk_parent_id_child”) : 객체간의 연관을 맺을 때 FK 인덱스의 이름을 명시해준다.
  • 이를 명시하지 않으면 FK숫자여러개지정으로 된다.
  • @org.hibernate.annotations.ForeignKey(name=“none”) : name=“none”은 FK를 강제로 못 맺게 한다. Forcing hbm2ddl to not generate an FK

@org.hibernate.annotations.ColumnTransformer

@Column
@ColumnTransformer(read = “pgp_sym_decrypt(creditCardNumber, ‘mySecretKey’)”, write = “pgp_sym_encrypt(?, ‘mySecretKey’))
private String creditCardNumber;

@org.hibernate.annotations.DynamicInsert

@org.hibernate.annotations.DynamicUpdate

@org.hibernate.annotations.Immutable

@org.hibernate.annotations.OptimisticLocking

@org.hibernate.annotations.Persister

@org.hibernate.annotations.Polymorphism

@org.hibernate.annotations.SelectBeforeUpdate

java/hibernate/annotations.txt · 마지막으로 수정됨: 2022/01/20 03:42 저자 kwon37xi