Hibernate 설정 상세 설명 (11)

6088 단어 Hibernate
hibernate.session_factory_name_is_jndi
hibenate. cfg. xml 에서 Session Factory 의 name 속성 을 JNDI 이름 으로 연결 할 지 설정 합 니 다.기본적으로 true, 즉 기본적으로 Session Factory 에 name 속성 을 설정 하면 Hibernate 는 이 이름 을 JNDI 에 연결 합 니 다.이것 에 대한 설정 을 보십시오:
http://blog.csdn.net/stefwu/article/details/10186077
하면, 만약, 만약...
 
Hibernate.session_factory_name_is_jndi false

그럼 아무 데 서 나 Session Factory 에 name 을 설정 하면 바 인 딩 을 하지 않 습 니 다.
 
hibernate.jdbc.use_get_generated_keys
hibenate 가 Prepared Statement 의 getGenerated Keys () 방법 으로 데이터베이스 에서 생 성 된 ID 값 을 얻 을 지 설정 합 니 다.일반적인 상황 에서 이 값 을 true 로 설정 하면 성능 을 향상 시 킬 수 있 습 니 다. 물론 데이터베이스 자체 가 제공 하 는 구동 도 getGenerated Keys () 방법 을 지원 해 야 합 니 다.기본적으로 hibenate 는 데이터베이스 의 DatabaseMetaData 의 슈퍼 portsGetGenerated Keys () 방법 으로 되 돌아 오 는 값 을 기본 값 으로 합 니 다.따라서 일반적인 상황 에서 이 속성 은 수 동 으로 설정 하지 않 고 hibenate 는 가장 좋 은 방법 을 선택 합 니 다.
만약 데이터베이스 구동 이 getGenerated Keys 방법 을 지원 하지 않 는 다 면, Hibernate 는 이 생 성 된 id 를 어떻게 처리 할 것 인가?재 미 있 습 니 다. 간단하게 실험 을 하고 설정 합 니 다.
 
hibernate.jdbc.use_get_generated_keys false

 
대상 을 임의로 만 들 고 id 생 성 정책 을 native 로 설정 합 니 다.예 를 들 어 제 가 현재 사용 하고 있 는 데이터 베 이 스 는 MYSQL 이 고 구동 은 my sql - connector - java - 5.1.24 - bin. jar 입 니 다.
 
@Test



public void testSave() {

Session session = HibernateUtil.getInstance().getSession();

session.beginTransaction();

session.save(new User());

session.getTransaction().commit();

session.close();

}

테스트 실행, 콘 솔 출력:
 
 
315 [main] DEBUG org.hibernate.SQL  - insert into USER (name, age, borndate, married) values (?, ?, ?, ?)



330 [main] DEBUG org.hibernate.SQL  - select last_insert_id()

효과 가 뚜렷 합 니 다. hibenate 는 last 만 사용 할 수 있 습 니 다.insert_id () 함 수 는 마지막 에 삽 입 된 값 을 얻 을 수 있 고 효율 이 낮 으 며 높 은 병발 상황 에서 오류 가 발생 하기 쉽다.
 
따라서 이 설정 의 값 을 hibenate 에 남 겨 두 고 선택 하 는 것 이 좋 습 니 다.
 
hibernate.hbm2ddl.auto
이 설정 항목 은 hibenate 를 배 우 는 모든 사람 이 사용 해 야 합 니 다. 이 속성 은 hibenate 가 맵 파일 에 따라 데이터베이스 시트 를 자동 으로 생 성 하 는 지 설정 할 수 있 습 니 다.일반적으로 자바 대상 이 먼저 있 고 표를 만 드 는 프로젝트 에 사 용 됩 니 다 (빠 른 원형 디자인 도 존재 합 니 다).이 설정 에서 선택 할 수 있 는 값 은 vaildate, update, create, create - drop 입 니 다. 이 외 에 입력 한 값 은 실제 의미 가 없 으 며 자동 으로 생 성 되 지 않 는 것 과 같 습 니 다 (none).
다음은 몇 가지 옵션 의 기능 을 간단하게 요약 한다.
 1. create - drop: hibenate 가 정상적으로 시 작 될 때 표를 만 듭 니 다 (create 와 같 습 니 다)
          1. 정상 적 인 시작 이 무엇 입 니까? buildSession Factory () 호출 성공
          2. 어떤 표를 만 듭 니까? hibenate 가 이번에 관리 하 는 대상 에 대응 하 는 표를 만 듭 니 다.
          3. 표 가 존재 한다 면: hibenate 가 관리 할 대상 에 해당 하 는 표 라면 원본 표를 삭제 하고 표를 다시 만 듭 니 다.
 2, create: hibenate 가 정상적으로 시 작 될 때 표를 만 듭 니 다.
          위 와 같다
 3, update: hibenate 가 정상적으로 시 작 될 때 표 의 구 조 를 수정 합 니 다.
          1. 어떤 표를 수정 합 니까?
          2. 표 가 존재 한다 면: 표 구조 만 수정 하고 삭제 / 재 구축 표 는 삭제 하지 않 습 니 다.
          3, 1 열 추가 시: 1 열 추가
          4, 열 을 삭제 하면: 몰라
          5. 한 열 형식 을 수정 하면: 이 열 형식 을 수정 하려 고 시도 합 니 다. 수정 에 실패 하면 경 고 를 보 냅 니 다.
 4. vaidate: hibenate 가 정상적으로 시 작 될 때 검증 표 의 구 조 는 일치 하지 않 으 면 직접 오 류 를 보고 하지 않 으 면 hibenate 가 시작 할 수 없습니다.
그 중에서 주의해 야 할 것 은 이 른 버 전 때 hibenate 는 create - drop 과 create 를 모두 시작 할 때 모든 시 계 를 삭제 하고 표를 다시 만 드 는 정책 으로 통일 시 켰 다 는 것 이다.평소 개발 에 서 는 개인 적 으로 화이트 박스 단계 에서 create 로 설정 하 는 습관 이 있 습 니 다.생산 환경 에서 update 를 사용 하 는 것 을 권장 하지 않 습 니 다. 이 유 는 앞에서 말 했 습 니 다. update 는 속성 유형 이 수정 되 었 습 니 다. 표 에 열 거 된 유형 을 업데이트 하지 못 하면 잘못 보고 하지 않 고 경고 만 할 수 있 습 니 다. 이것 은 정말 위험 합 니 다.
또 히 베 네 이 트 는 맵 파일 을 SQL 파일 로 직접 내 보 내 는 방식 도 제공 했다.SQL 을 내 보 내 려 면 두 가지 종류 만 사용 해 야 합 니 다: SchemaExport 와 SchemaUpdate.이름 에서 쉽게 알 수 있 습 니 다. 업 데 이 트 를 만 드 는 작업, 만 드 는 작업 을 만 드 는 데 사 용 됩 니 다.간단 한 사용 코드 는 다음 과 같 습 니 다.
  /**

  	 *     /    SQL    

  	 */

  	@Test

  	public void testExport() {

  		//    SQL,    hibernate     domain,        

  		Configuration config = new Configuration().configure();

  		//    SQL,           ,   

  		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()

  				.loadProperties("hibernate.properties").buildServiceRegistry();

  		//   Configuration ServiceRegistry    SchemaExport  

  		// setFormat            SQL     ,      hibernate.format_sql  

  		// setOutputFile          SQL        

  		// create      SQL,            SQL          ,

  		//               SQL       

  		new SchemaExport(serviceRegistry, config).setFormat(true)

  				.setOutputFile("create.sql").create(true, false);

  	}

  

  	/**

  	 *      SQL    

  	 */

  	@Test

  	public void testExportDrop() {

  		//    SQL,    hibernate     domain,        

  		Configuration config = new Configuration().configure();

  		//    SQL,           ,   

  		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()

  				.loadProperties("hibernate.properties").buildServiceRegistry();

  		// drop          SQL,            SQL          ,

  		//               SQL       

  		new SchemaExport(serviceRegistry, config).setFormat(true)

  				.setOutputFile("drop.sql").drop(true, false);

  	}

  

  	/**

  	 *        SQL    

  	 */

  	@Test

  	public void testExportUpdate() {

  		//    SQL,    hibernate     domain,        

  		Configuration config = new Configuration().configure();

  		//    SQL,           ,   

  		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()

  				.loadProperties("hibernate.properties").buildServiceRegistry();

  		//   Configuration ServiceRegistry    SchemaUpdate  

  		SchemaUpdate update=new SchemaUpdate(serviceRegistry, config);

  		// setFormat            SQL     ,      hibernate.format_sql  

  		update.setFormat(true);

  		// setOutputFile          SQL        

  		update.setOutputFile("update.sql");

  		// execute            SQL,            SQL          ,

  		//               SQL       

  		update.execute(true, false);

  	}

좋은 웹페이지 즐겨찾기