2010-02-16 5 views
3

최대 절전 모드 내가 CakePHP의 응용 프로그램에 대한 복수화

  • 자바 SE 응용 프로그램을 현재 개발에, 최대 절전 모드를 통해 동일한 데이터베이스에 액세스하는

    • 생산 현재 사용중인 MySQL 데이터베이스를 가지고있다.

    NetBeans의 "자동화 기능"기능을 사용하여 POJO 클래스 및 XML 파일을 만듭니다 (주석을 사용할 때 실제로 XML 파일이 필요합니까?). 스키마가 복잡하기 때문에 수동으로 테이블을 만드는 것은 너무 많은 작업입니다.

    Cake는 모든 DB 테이블이 복수화 될 것으로 기대한다 (Address 클래스는 자동으로 주소 테이블에 매핑된다). Netbeans 자동 마이그레이션을 실행하면 이미 복수화 된 테이블 이름에 대해 복수화를 수행합니다 (Addresses.java 및 setAddresseses() 메소드를 얻음).

    동일한 데이터베이스에 대해 서로 다른 두 개의 데이터 레이어를 실행하는 데 문제가 있는지 알고 싶지만 Netbeans에서 POJO 클래스를 단수 형태로 생성 할 수 있는지 또는 다른 것이 더 좋은지 알고 싶습니다.) 이것을 관리하는 방법.

  • 답변

    2

    리버스 엔지니어링을 수행하는 경우 custom reverse engineering strategy을 사용할 수 있습니다. 문서 인용 :

    전략을 구현할 수 있습니다. 이러한 전략은 org.hibernate.cfg.reveng.ReverseEngineeringStrategy. 하나가 DelegatingReverseEngineeringStrategy 를 사용하는 것이 좋습니다 구현하고 다른 ReverseEngineeringStrategy 등의 인수를 취하는 public 생성자를 제공해야합니다. 이렇게하면 만 관련 방법을 구현하고 은 대체 전략을 제공 할 수 있습니다. 예 "PK"로 끝나는 모든 열 이름을 "id"속성으로 변환하는 사용자 지정 위임 전략의 예 귀하의 경우에는

    public class ExampleStrategy extends DelegatingReverseEngineeringStrategy { 
        public ExampleStrategy(ReverseEngineeringStrategy delegate) { 
         super(delegate); 
        } 
        public String columnToPropertyName(TableIdentifier table, String column) { 
         if(column.endsWith("PK")) { 
          return "id"; 
         } else { 
          return super.columnToPropertyName(table, column); 
         } 
        } 
    } 
    

    , 당신은

    public String tableToClassName(TableIdentifier tableIdentifier) { 
        return delegate==null?null:delegate.tableToClassName(tableIdentifier); 
    } 
    

    는 "depluralize"클래스는 테이블 이름 (ADDRESSES =>Address)에서 발생하는 구현 할 수 있습니다.

    그러나 슬프게도, 넷빈즈 Hibernate Reverse Engineering Wizard사용자가이 일어날 경우 리버스 엔지니어링 전략을 선택하는 옵션을 제공하지않는 (이 시간이 허락하면 넷빈즈 7.0 계획된 향상이다).

    맞춤 전략을 사용하려면 Ant 또는 Maven을 사용해야합니다. NetBeans에서는 현재 불가능합니다.