create-only
: 생성만하고, drop은 하지 않는다. 개발 모드에서 최초에 한 번 이걸로 실행하고, 다음에는 update
로 변경하면 될 듯. Hibernate 5.2 이상에서만 지원하는 것으로 보임.create
: Session factory가 실행될 때에 스키마를 지우고 다시 생성. 클래스패스에 import.sql 이 존재하면 찾아서, 해당 SQL도 함께 실행함.create-drop
: create와 같지만 session factory가 내려갈 때 스키마 삭제. 클래스패스에 import.sql 이 존재하면 찾아서, 해당 SQL도 함께 실행함.update
: 시작시, 도메인과 스키마 비교하여 필요한 컬럼 추가 등의 작업 실행. 데이터는 삭제하지 않음.validate
: Session factory 실행시 스키마가 적합한지 검사함. 문제가 있으면 예외 발생.settings.put( AvailableSettings.JDBC_TIME_ZONE, TimeZone.getTimeZone( "UTC" ) ); // or Session session = sessionFactory() .withOptions() .jdbcTimeZone( TimeZone.getTimeZone( "UTC" ) ) .openSession();
hibernate.temp.use_jdbc_metadata_defaults=false
로 두어야 한다.JdbcServicesImpl.java
주석.// 'hibernate.temp.use_jdbc_metadata_defaults' is a temporary magic value. // The need for it is intended to be alleviated with future development, thus it is // not defined as an Environment constant... // // it is used to control whether we should consult the JDBC metadata to determine // certain Settings default values; it is useful to *not* do this when the database // may not be available (mainly in tools usage). boolean useJdbcMetadata = ConfigurationHelper.getBoolean( "hibernate.temp.use_jdbc_metadata_defaults", configValues, true );
hibernate.enable_lazy_load_no_trans=true|false
사용하지 말 것. Open Session In View와 비슷한 역할.hibernate.globally_quoted_identifiers=true hibernate.globally_quoted_identifiers_skip_column_definitions=true
columnDefinition
에 있는 단어도 함께 escape 시켜버리는데, 이것을 방지하는게 hibernate.globally_quoted_identifiers_skip_column_definitions=true
프라퍼티이다.5.2.13
버전 이후 설정 가능. to-many
관계의 join fetch 에 대해 warning
로그를 남기지만 이것은 발견하기 매우 어렵다.hibernate.query.fail_on_pagination_over_collection_fetch=true
설정을 하면 아예 exception 을 발생시키게 된다.hibernate.query.fail_on_pagination_over_collection_fetch=true