====== 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]]