문제

다음 Java 6 코드가 있습니다.

    Query q = em.createNativeQuery( 
        "select T.* " +
        "from Trip T join Itinerary I on (T.itinerary_id=I.id) " +
        "where I.launchDate between :start and :end " +
        "or ADDDATE(I.launchDate, I.equipmentPullDayOfTrip) between :start and :end",
        "TripResults" );

    q.setParameter( "start", range.getStart(), TemporalType.DATE );
    q.setParameter( "end", range.getEnd(), TemporalType.DATE );

    @SqlResultSetMapping( name="TripResults",
        entities={
            @EntityResult( entityClass=TripEntity.class ),
            @EntityResult( entityClass=CommercialTripEntity.class )
        }
    )

마지막 닫는 오른쪽 괄호에서 구문 오류가 발생합니다.Eclipse는 다음을 제공합니다."블록 문을 완성하려면 EnumBody를 삽입하세요." 및 "EnumHeaderName을 완성하려면 enum 식별자를 삽입하세요."javac에서 유사한 구문 오류가 발생했습니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까?

도움이 되었습니까?

해결책

Hibernate 주석 문서(http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/) 이는 코드 내에서 인라인으로 발생하지 않고 클래스 수준 주석이어야 한다고 제안합니다.실제로 해당 코드를 IDE에 붙여넣고 이동하면 주석이 인라인일 때 컴파일 오류가 표시되지만 클래스 선언 위에 넣으면 사라집니다.

@SqlResultSetMapping( name="TripResults",
        entities={
            @EntityResult( entityClass=TripEntity.class ),
            @EntityResult( entityClass=CommercialTripEntity.class )
        }
    )
public class Foo {
   public void bogus() {
      Query q = em.createNativeQuery( 
        "select T.* " +
        "from Trip T join Itinerary I on (T.itinerary_id=I.id) " +
        "where I.launchDate between :start and :end " +
        "or ADDDATE(I.launchDate, I.equipmentPullDayOfTrip) between :start and :end",
        "TripResults" );

      q.setParameter( "start", range.getStart(), TemporalType.DATE );
      q.setParameter( "end", range.getEnd(), TemporalType.DATE );
   }
}

...분명히 위의 코드가 실제로 작동할 것이라는 증거는 없습니다.컴파일 오류가 발생하지 않는 것만 확인했습니다.

다른 팁

귀하의 예는 불행하게도 제대로 표현되지 않은 API 문서에서 직접 나온 것입니다.

주석은 일부 클래스(아마도 결과 집합 매핑을 사용하기 위해 쿼리를 생성할 클래스)에 배치되어야 합니다.그러나 실제로 이 주석이 어디에 배치되는지는 중요하지 않습니다.JPA 제공자는 실제로 이러한 모든 매핑의 전역 목록을 유지 관리하므로 어디에서 정의하더라도 어디에서나 사용할 수 있습니다.

이는 주석 방법의 단점입니다(XML로 항목을 지정하는 것과 반대). JPA의 다른 많은 항목(예:명명된 쿼리)도 이와 동일한 방식으로 정의됩니다.이는 정의된 것과 주석이 달린 클래스 사이에 어떤 종류의 연결이 있는 것처럼 보이게 만듭니다. 그렇지 않은 경우에도 마찬가지입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top