Vra

Ek het die volgende Java 6-kode:

    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 )
        }
    )

Ek ontvang 'n sintaksfout op die laaste sluiting reg hakies. Eclipse gee: "Voeg EnumBody te blok verklaring voltooi" en "Voeg enum Identifier om EnumHeaderName voltooi". Soortgelyke sintaksfout van javac.

Wat doen ek verkeerd?

Was dit nuttig?

Oplossing

Die Hibernate annotasies dokumente ( http://www.hibernate.org / hib_docs / notas / verwysing / af / html_single / ) dui daarop dat hierdie 'n klas-vlak body moet wees eerder as voorkomende inline binne jou kode. En inderdaad toe ek plak dit-kode in my IDE en beweeg dit rond, die opstel foute teenwoordig is wanneer die body is inline, maar verdwyn toe ek dit in bo die klas verklaring:

@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 );
   }
}

... natuurlik ek het geen bewyse dat die bogenoemde kode eintlik sal werk. Ek het net bevestig dat dit nie veroorsaak stel foute.

Ander wenke

Jou voorbeeld kom reguit uit die API dokumente wat ongelukkig swak aangebied.

Jou body moet op 'n klas geplaas word, waarskynlik die een waarin jy sal die skep van die navraag aan die resultaat stel kartering gebruik. Maar dit beteken eintlik nie saak waar hierdie body geplaas. Jou JPA verskaffer sal eintlik in stand te hou 'n globale lys van al hierdie afbeeldings, so maak nie saak waar jy dit definieer, sal jy in staat wees om dit op enige plek gebruik word.

Dit is 'n tekortkoming van die body metode (in teenstelling met vermelding van dinge in XML.) Baie ander dinge in die JPA (dit wil sê met die naam navrae) is hierdie dieselfde manier gedefinieer. Dit maak dit lyk asof daar 'n soort van die verband tussen die ding wat gedefinieer en die klas waarop dit is aangeteken, toe dit is nie.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top