2012-11-06 2 views
1

배경은 다음과 같습니다. 필드가있는 주석이 달린 @Embeddable Java 클래스가 있습니다. hibernate3 : hbm2ddl을 사용하여 hibernate3 Maven 플러그인을 통해 스키마를 생성하여이 객체가 포함 된 다른 객체를 유지할 수 있지만 @Temporal과 관련된 오류가 발생합니다. 여기 hbm2ddl이 GregorianCalendar의 @Temporal 주석을 좋아하지 않는 이유는 무엇입니까?

는 임베드 클래스 :

@Embeddable 
public class OperationalStatus implements Serializable { 
     . 
     . 
     . 
    /** 
    * Recorded date/time that the status value is valid 
    */ 
    private GregorianCalendar time; 

    /** 
    * No-argument constructor. 
    */ 
    public OperationalStatus() {} 
     . 
     . 
     . 
    /** 
    * @return the time 
    */ 
    @Temporal(TemporalType.TIMESTAMP) 
    public GregorianCalendar getTime() { 
     return time; 
    } 

    /** 
    * @param time the time to set 
    */ 
    public void setTime(GregorianCalendar time) { 
     this.time = time; 
    } 
} 

그리고 여기에 오류 판독입니다 : Hibernate3는-받는다는 - 플러그인 :

[ERROR] 목표 org.codehaus.mojo을 실행하지 못했습니다 2.2 : hbm 프로젝트의 2ddl (default-cli) STRIPES_V2 : 목표 org.code의 실행 기본값 -cli haus.mojo : hibernate3-maven-plugin : 2.2 : hbm2ddl 실패 : @Temporal은 Java에서 et이어야합니다. util.Date 또는 java.util.Calendar 프로퍼티 : stripes.datamodel. util.OperationalStatus.time 여기

POM을 일부 발췌 : 나는 무엇을 놓치고

<plugin> 
<groupId>org.codehaus.mojo</groupId> 
<artifactId>hibernate3-maven-plugin</artifactId> 
<version>2.2</version> 
<configuration> 
    <components> 
     <component> 
      <name>hbm2ddl</name> 
      <implementation>annotationconfiguration</implementation> 
     </component> 
    </components> 
    <componentProperties> 
     <drop>false</drop> 
     <configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile> 
     <outputfilename>schema.sql</outputfilename> 
    </componentProperties> 
</configuration> 
<dependencies> 
    <dependency> 
     <groupId>postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.2-1000.jdbc4</version> 
    </dependency> 
</dependencies> 
</plugin> 
. 
. 
. 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <version>4.1.7.Final</version> 
    <artifactId>hibernate-core</artifactId> 
</dependency> 

은? GregorianCalendar는 Calendar의 구체적인 확장 기능입니다. 무엇이 잘못 되었나요?

+0

어떤 버전의 Hibernate를 사용하고 있습니까? – ElderMael

+0

POM 정보가 추가되었습니다. 질문 텍스트에. – skippy

답변

1

특정 사양의 특정 임의의 구현을 제공 할 수있는 공급자를 제한하지 않으므로 특정 일정을 지정하도록 요구할 경우 호환성 문제가 발생할 수 있습니다. (올바른 생각을 가진 사람은 누구도 Calendar의 새 하위 클래스를 만들지는 않겠지 만 가능성은 있습니다 .JAX 구현은 Calendar의 자체 사용자 정의 하위 클래스를 반환하는 방법을 알고 있었을 뿐이지 만, 대신 GregorianCalendar를 사용하는 방법을 알 필요가 없습니다.)

또는 org.affe.MyAwesomeCalendar를 만들면 반대쪽에서 JPA 공급자가 인스턴스를 만들 수 있다고 기대하는 것이 합리적이지 않습니다. 나를 위해 그것의!

11.1.47 임시 주석

시간적 주석은 지속 필드 또는 형식 java.util.Date의 특성과 java.util.Calendar에 지정해야합니다. 이 유형의 필드 또는 특성 에 대해서만 지정 될 수 있습니다.

최대 절전 모드에서는 java.sql.Date 등을 직접 선택할 수 없습니다. 기본적으로 그들은 지속성 공급자에게 맡겨져있어 Calendar의 구현이 사용되는지 결정합니다.

+0

글쎄. 내 경우에 어떻게 대처할 수 있는지에 대한 제안? – skippy

+1

JPA를 고수하지 않고 특별히 최대 절전 모드를 사용할 수 있다면 하드 사용자 유형이 아니기 때문에 많은 사람들이이를 수행하고 있습니다. 어떤 이유로 든 API 대신 GregorianCalendar가 필요하다면 임시 필드를 사용하여 GregorianCalendar를 생성 할 수도 있습니다. – Affe