2011-03-09 9 views
5


Eclipse (Helios)에서 최대 절전 모드 도구 3.40을 사용하고 있습니다. EJB3 스타일 (예 : JPA2.0 주석)을 사용하여 내 DB (MSSQL 2008)에서 POJO를 생성하려고합니다.
AB의 두 테이블이 있는데 A에서 B까지 외래 키가 있다고 가정 해 봅시다.
기본적으로 B을 구성원 ("부모")으로하고 B을 POJO (구성원은 "자식") Set<A>으로 설정 한 A의 POJO를 생성합니다.
내가 원하는 것은 rev-eng을 제어하여 협회의 한 쪽만 만들어지기를 원한다는 것입니다. (저는 다른 유스 케이스를 가지고 있으므로 기본적으로 세 가지 옵션 모두 저에게 중요합니다).
나는 주석과 JPA2.0 함께 일하고 있어요으로 파일을 hbm.xml 사용하지 않으려는하지만 시도했습니다최대 절전 모드 도구와 다 대일 단방향 연관을 리버스 엔지니어링 할 때의 문제

나는 hibernae.reveng.xml를 통해 최대 절전 모드로 리버스 엔지니어링 과정에 대한 몇 가지 메타 데이터를 지정할 수 있습니다 foreign-key 속성을 구성하고 거기에 exclude=true을 정의하지만 한 시나리오에 대해서만 절반의 대답을 제공했습니다. 생성 된 POJO는 A이고 허용되는 이해가 가능한 bPK int 멤버는 이지만B의 생성 된 POJO는 one-to-many 주석에 잘못된 특성이 있으므로 컴파일되지 않습니다. A에는 더 이상 reveng를 최대 절전 모드로 설정할 수있는 속성이 없으므로 mappedby="unresolved"이 다시 매핑 될 수 있습니다.

그래서 현재는 단방향 연결을 만들 수 없으며 어떤 도움을 주셔서 감사합니다.

답변

3

Hibernate Code Generation Configuration

예에서 reveng. strategy에 대한 클래스를 만듭니다 : 다른 메서드 호출 방법 excludeForeignKeyAsCollection

Should this foreignkey be excluded as a oneToMany 

에 대한

public class MyReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy { 

    public MyReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) { 
     super(delegate); 
    } 

    @Override 
    public void setSettings(ReverseEngineeringSettings settings) { 
     super.setSettings(settings); 
    } 

    @Override 
    public boolean excludeForeignKeyAsCollection(String keyname, 
    TableIdentifier fromTable, java.util.List fromColumns, 
    TableIdentifier referencedTable, java.util.List referencedColumns) { 

    // TODO : Your work here 
    if (keyname.equals("___") && 
     fromTable.getName().equals("___") && 
     fromColumns.contains("___") && 
     referencedTable.getName().equals("___") && 
     referencedColumns.contains("___")) { 

     return true; 
    } 

    return false; 
    } 
} 

의 JavaDoc을하고도이 excludeForeignKeyAsManytoOne

Should this foreignkey be excluded as a many-to-one 
+1

덕분에 많이. "불분명 한"클래스에서 이러한 요구 사항을 하드 코딩하는 것보다 더 나은 방법이 있었으면 좋겠지 만 적어도 작동하는 솔루션입니다. – Ittai

+0

동일한 문제가 있지만 귀하의 답변은 "___"에만 해당됩니다. 일반적인 대답은 아닙니다. 어쨌든 고마워. – Kummo

0

현재 단방향 다 대일 작업을 생성하면서 최대 절전 모드 도구 5.2으로 테스트되었습니다 ().예를 들어

(이름 변경 등록)

<!-- control many-to-one and set names for a specific named foreign key constraint --> 
<foreign-key constraint-name="ORDER_CUST"> 
    <many-to-one property="customer"/> 
    <set property="orders"/> 
</foreign-key> 

또는 (제외 특성)

<!-- can also control a pure (shared pk) one-to-one --> 
    <foreign-key constraint-name="ADDRESS_PERSON"> 
    <one-to-one exclude="false"/> 
    <inverse-one-to-one exclude="true"/> 
    </foreign-key> 
: 문서 (https://docs.jboss.org/tools/4.0.0.Final/en/hibernatetools/html_single/index.html#hibernaterevengxmlfile), 당신은 당신이 관계의 몇 가지 측면을 제외 할 수 있음을 알 수에서

@ManyToOne과의 관계 중 한쪽 만 가지고 싶다면 다음을 수행 할 수 있습니다.

<table name="city" schema="public"> 
    <primary-key property="id"> 
     <key-column name="id" type="integer"/> 
    </primary-key> 
</table> 

<table name="country" schema="public"> 
    <foreign-key constraint-name="country_capital_fkey" foreign-schema="public"> 
     <many-to-one property="capital" exclude="false"/> 
     <set exclude="true" /> 
    </foreign-key> 
</table> 

또한 여기 도커 내 샘플 데이터베이스의 인스턴스를 가져올 수 :

고정 표시기의 풀 ghusta/포스트 그레스 세계-DB를 : 2.1