Mit JPA 2.0 Criteria-API und cast Ursachen erzeugt JPQL, um nicht in den Ruhezustand

Ich bin eine erste Zeit Benutzer der neuen JPA-2.0-Kriterien-API und ich 'm laufen in ein problem, wenn ich brauche zu werfen auf das Feld Nummer String-vergleichen Sie es mit einem String-parameter. Grund ist, dass ich suchen will, teilweise zahlen, so dass ich mit einem 'like' auf der CriteriaBuilder. Hier ein code-Beispiel:

CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
        CriteriaQuery<ParcelDO> cq = cb.createQuery(ParcelDO.class);
        Root<ParcelDO> parcelDO = cq.from(ParcelDO.class);
        cq.select(parcelDO);

        String parcelNumberId = parcelSearchDetailDO.getParcelNumberId();
        if (parcelNumberId != null && !parcelNumberId.isEmpty()) {
            Predicate parcelNumberIdPredicate = cb.like(
                    parcelDO.<Long> get("parcelNumberId").as(String.class),
                    parcelNumberId + "%");

            if (cq.getRestriction() != null) {
                cq.where(cq.getRestriction(), parcelNumberIdPredicate);
            } else {
                cq.where(parcelNumberIdPredicate);
            }
        }

Ist der wichtige Teil

Predicate parcelNumberIdPredicate = cb.like(
                    parcelDO.<Long> get("parcelNumberId").as(String.class),
                    parcelNumberId + "%");

wo ich die Kriterien API zum konvertieren des Pfads in einen Ausdruck gebraucht für die like-Methode auf die CriteriaBuilder.

Wenn ich jetzt ausführen, und dieser code ausgeführt, der zugrunde liegenden JPA 2.0 Implementierung Hibernate fehlschlägt, mit der folgenden Ausnahme:

Caused by: org.hibernate.hql.ast.QuerySyntaxException:
expecting CLOSE, found '(' near line 1, column 117 
[select generatedAlias0 from domain.ParcelDO as generatedAlias0 where
cast(generatedAlias0.parcelNumberId as varchar2(255 char)) like :param0]

Sieht für mich wie Hibernate ist die Erzeugung eines JPQL, dass ist nicht korrekt.

Ich habe keine Ahnung, was falsch ist, können Sie helfen?

Ich benutze die neueste Hibernate-version (3.6.0.CR2)

Danke

  • Es ist ein bug, habe ich davon berichtet: opensource.atlassian.com/projects/hibernate/browse/HHH-5755
  • axtavt, danke. Haben Sie fand einen workaround noch?
  • die lattest hibernate-entitymanager (release -) version ist 3.6.0.Endgültig.
  • Dank becomputer06, du hast Recht. Leider das gleiche problem, obwohl
InformationsquelleAutor bruma | 2010-11-24
Schreibe einen Kommentar