내용으로 건너뛰기
권남
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
추적:
java:hibernate:valuegenerationtype
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Hibernate @ValueGenerationType ====== * [[java:hibernate|Hibernate]]에서 필드의 값을 자동으로 생성하는 기법 * [[https://docs.jboss.org/hibernate/orm/6.0/javadocs/org/hibernate/annotations/ValueGenerationType.html|ValueGenerationType (Hibernate JavaDocs)]] 는 메타 어노테이션으로 다른 어노테이션을 값을 자동생성하는 어노테이션으로 지정해준다. * [[https://docs.jboss.org/hibernate/orm/6.0/javadocs/org/hibernate/tuple/AnnotationValueGeneration.html|AnnotationValueGeneration]] 를 구현하여 실제로 값을 생성해주고, 이렇게 생성된 값이 필드의 값으로 자동으로 들어간다. * 이를 기반으로 하여 [[https://docs.jboss.org/hibernate/orm/6.0/javadocs/org/hibernate/tuple/CreationTimestampGeneration.html|CreationTimestampGeneration]] [[https://docs.jboss.org/hibernate/orm/6.0/javadocs/org/hibernate/tuple/UpdateTimestampGeneration.html|UpdateTimestampGeneration]] 등이 만들어졌다. * see [[java:hibernate:generated|Hibernate @Generated]] ===== Example ===== <code java> @Entity(name = "Event") public static class Event { @Id @GeneratedValue private Long id; @Column(name = "`timestamp`") @FunctionCreationTimestamp private Date timestamp; //Constructors, getters, and setters are omitted for brevity } @ValueGenerationType(generatedBy = FunctionCreationValueGeneration.class) @Retention(RetentionPolicy.RUNTIME) public @interface FunctionCreationTimestamp {} // DB를 통해 자동생성 지원 public static class FunctionCreationValueGeneration implements AnnotationValueGeneration<FunctionCreationTimestamp> { @Override public void initialize(FunctionCreationTimestamp annotation, Class<?> propertyType) { } /** * Generate value on INSERT * @return when to generate the value */ public GenerationTiming getGenerationTiming() { return GenerationTiming.INSERT; } /** * Returns null because the value is generated by the database. * @return null */ public ValueGenerator<?> getValueGenerator() { return null; } /** * Returns true because the value is generated by the database. * @return true */ public boolean referenceColumnInSql() { return true; } /** * Returns the database-generated value * @return database-generated value */ public String getDatabaseGeneratedReferencedColumnValue() { return "current_timestamp"; } } </code> 쿼리가 아래처럼 실행된다. <code sql> INSERT INTO Event ("timestamp", id) VALUES (current_timestamp, 1) </code> <code java> // In memory 상에서 자동생성 public static class FunctionCreationValueGeneration implements AnnotationValueGeneration<FunctionCreationTimestamp> { @Override public void initialize(FunctionCreationTimestamp annotation, Class<?> propertyType) { } /** * Generate value on INSERT * @return when to generate the value */ public GenerationTiming getGenerationTiming() { return GenerationTiming.INSERT; } /** * Returns the in-memory generated value * @return {@code true} */ public ValueGenerator<?> getValueGenerator() { return (session, owner) -> new Date( ); } /** * Returns false because the value is generated by the database. * @return false */ public boolean referenceColumnInSql() { return false; } /** * Returns null because the value is generated in-memory. * @return null */ public String getDatabaseGeneratedReferencedColumnValue() { return null; } } </code> 쿼리가 다음과 같이 날라간다. <code sql> INSERT INTO Event ("timestamp", id) VALUES ('Tue Mar 01 10:58:18 EET 2016', 1) </code>
java/hibernate/valuegenerationtype.txt
· 마지막으로 수정됨: 2021/10/07 22:04 저자
kwon37xi
문서 도구
문서 보기
이전 판
역링크
맨 위로