2014-04-25 2 views
0

DB에서 엔터티를 검색하기 위해 최대 절전 모드 리버스 엔지니어링을 사용하고 있습니다 (이 경우 oracle DB). 경우에 따라 생성 된 hbm 파일에 not null이 없습니다. 그리고 테이블 (열)이 어떻게 생성 (정의)되는지에 따라 다릅니다.hibernate 리버스 엔지니어링 열이 null이 아님 attribute

이 괜찮 :

<column length="7" name="RECORD_CREATED" not-null="true"></column> 

이 확인되지에서 : 우리는이 칼럼의 레코드를 가지고

CREATE TABLE "MY_TABLE1" 
(
... 
"RECORD_CREATED" DATE DEFAULT SYSDATE NOT NULL ENABLE, 
... 

그런 다음에 HBM 파일

CREATE TABLE "MY_TABLE1" 
(
... 
    "RECORD_CREATED" DATE DEFAULT SYSDATE, 
    ... 
    ... 
    CHECK ("RECORD_CREATED" IS NOT NULL) ENABLE, 
    ... 

그리고 HBM 파일에 우리 이 열 기록을 가져 왔습니다.

<column length="7" name="RECORD_CREATED"></column> 

나는 그것이 왜 그렇게, 왜 최대 절전 모드가 그렇게 민감한 지 이해하지 못합니까? 어쩌면 구성의 문제 일 수도 있지만 그와 관련있는 것을 찾지 못했습니다.

무엇이 문제입니까? 두 번째 경우에 누락 된 "not-null = true"속성이있는 이유는 무엇입니까?

감사합니다.

+0

영구적으로 검사를 비활성화 할 수 있습니다. 검사는 오류로 해석되지 않습니다. 따라서 최대 절전 모드는 오류로 널 (null)을 애 태우는 것이 허용되지 않습니다. 첫 번째 경우, 우리 모두는 null이 오류임을 알고 있습니다. –

+0

하지만 거기에 확인 하 고 싶습니다 및 방법을 두 번째 경우 null 특성을 생성하는 최대 절전 모드 도구를 강제로 찾을 싶습니다. – squirrelInTheBarel

+0

원하는 경우 맞춤 전략을 작성할 수 있습니다. reveng에 maven을 사용하고 있습니까? –

답변

0

직접 전략을 작성하십시오. 이 같은 받는다는에서

]을 참조 그것은이 같은

<build><plugins><plugin> 
    <artifactId>hibernate3-maven-plugin</artifactId> 
    <configuration> 
     <components> 
     <component> 
      <name>hbm2java</name> 
     </component> 
     </components> 
     <reversestrategy>MyStrategyImpl</reversestrategy> 
     ... 

그리고 쓰기는 :

public class MyStrategyImpl extends DelegatingReverseEngineeringStrategy { 
    public String columnToHibernateTypeName(TableIdentifier table, String columnName, int sqlType, int length, int precision, int scale, boolean nullable, boolean generatedIdentifier) { 
     if(/*yourJdbcSelects*/){ 
     nullable = true; 
     } 
     super.columnToHibernateTypeName(table, columnName, sqlType, length, precision, scale, nullable, generatedIdentifier); 
    } 
}