====== Hibernate @Generated ======
* [[https://docs.jboss.org/hibernate/orm/6.0/javadocs/org/hibernate/annotations/Generated.html|@Generated ]]
* 테이블 생성시에 ''TIMESTAMP'' 자동 생성을 하도록 하는 것처럼, DB에 의해 insert/update 시에 자동으로 값이 생성, 업데이트 되는 필드를 지정한다.
* 주로 ''TIMESTAMP''에 지정될 것으로 보인다. 하지만, DB 자체에 테이블 선언시 특정 컬럼을 자동 생성가능하게 하는 기능이 있다면, 해당되는 컬럼에 다 사용할 수 있다.
* see [[java:jpa:datetime|JPA Date Time]]
* [[java:hibernate:valuegenerationtype|Hibernate @ValueGenerationType]]
* 이 방식은 legacy 로 가급적 다른 방식을 권한다.
이 기능은 persist/merge 후에 자동 생성된 값을 다시 자동으로 DB에서 읽어들이기 때문에 DB 부담이 될 수도 있다. PK로 읽기 때문에 매우 높은 수준의 부담은 아니다.
===== Example =====
@Generated(GenerationTime.ALWAYS)
@Column(name="create_date", insertable=false,updatable=false)
private LocalDateTime createDate;
[[database:mysql|MySQL]]의 경우 컬럼 선언이 다음과 같이 되어 자동으로 생서/수정시간이 생성되는 경우 사용 가능하다.
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
modified_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
===== 참조 =====
* [[https://thorben-janssen.com/hibernate-tips-map-values-generated-database/|Hibernate Tips: Map values that are generated by the database]]
* [[https://vladmihalcea.com/how-to-map-calculated-properties-with-hibernate-generated-annotation/|How to map calculated properties with Hibernate @Generated annotation - Vlad Mihalcea]]
* [[http://docs.jboss.org/hibernate/orm/4.3/topical/html/generated/GeneratedValues.html|Generated Values]]
* [[http://www.concretepage.com/hibernate/example-generated-hibernate|Hibernate @Generated example]]