# Sortierung mit der Criteria API



## computersport (8. Mrz 2011)

Moin,

ich versuch zurzeit eine Sortierung mit der Criteria API durchzuführen.
Jedoch auf eine EmbeddedId.

Die POJO:

```
@Entity
@Table(name = "BESCHREIBUNG")
public class Beschreibung implements Serializable 
{
  @EmbeddedId
  protected BePK BePK;
  @Column(name = "BESCHR", length = 80)
  private String beschr= "";

  public VO()
  {
  }
}
```
EmbeddedId:

```
@Embeddable
public class BePK implements Serializable {
    @Column(name = "Name", length=80)
    private String name;
    @Column(name = "BENUTZERNAME", length=80)
    private String benutzername;

    public BePK() {
    }
}
```
Der Aufruf:

```
criteria = con.getSession().createCriteria(Beschreibung.class);
    criteria.addOrder(Order.desc("name"));
```

Fehlermeldung:

```
Exception in thread "main" org.hibernate.QueryException: could not resolve property: name of: de.test.system.Beschreibung
```

Warum findet Hibernate nicht das Attribut?
Nehme ich die falsche Bezeichnung? (Ich hatte schon einiges ausprobiert wie: "Beschreibung.BePK.name" auch Groß und Kleinschreibung)

Funktioniert aber nichts von.


----------



## SlaterB (8. Mrz 2011)

name steht außer Frage, Beschreibung hat doch kein entsprechendes Attribut,
'BePK.name' wäre zusammengesetzt, ob das so funktioniert ist generell fraglich (wobei ich nichts dazu weiß, verwende nur HQL),
fange doch mit Tests nach
> Order.desc("benutzername")
> Order.desc("BePK")
an, was funktioniert davon alles?


dringender als deinen nächsten Atemzug empfehle ich übrigens, BePK klein zu schreiben,
sowieso für ALLE normalen Attribute in ALLEN Java-Klassen Standard, 
noch viel wichtiger aber sollte man sich an die Konvention in derart kontrollierten Umgebungen halten


----------



## computersport (8. Mrz 2011)

SlaterB hat gesagt.:


> name steht außer Frage, Beschreibung hat doch kein entsprechendes Attribut,
> 'BePK.name' wäre zusammengesetzt, ob das so funktioniert ist generell fraglich (wobei ich nichts dazu weiß, verwende nur HQL),
> fange doch mit Tests nach
> > Order.desc("benutzername")
> ...


Ich hab 
> Order.desc("BePK")
> Order.desc("benutzername")
> Order.desc("BePK.benutzername")
> Order.desc("BePK.name")
> Order.desc("name")
ausprobiert aber bei jedem krieg ich die selbe Exception.



SlaterB hat gesagt.:


> dringender als deinen nächsten Atemzug empfehle ich übrigens, BePK klein zu schreiben,
> sowieso für ALLE normalen Attribute in ALLEN Java-Klassen Standard,
> noch viel wichtiger aber sollte man sich an die Konvention in derart kontrollierten Umgebungen halten


Das tue ich normalerweise auch. Das ist ein Beispiel das ich eben schnell zusammen geschrieben habe, aber das vom Aufbau genauso ist wie mein Produktivsystem. Das Produktivsystem hält die Konventionen ein.

Grüße
Compi


----------



## SlaterB (8. Mrz 2011)

äh, benutzername war schlechter Vorschlag von mir, das Attribut ist ja auch nicht in Beschreibung, sondern in BePK 
'beschr' ist dagegen ein normales Attribut, kannst du die Beschreibung-Criteria danach sortieren?

zusammengesetzt müsste ansonsten normalerweise auch funktionieren, habe ich bei mir soeben getestet,
allerdings verwende ich auch nur kleingeschriebene private Attribute zusammen mit public getter/setter und keine Annotations sondern hbm.xml-Dateien,
ich kann also deinen Fall weder genau beurteilen noch allzu gut selber darstellen/ testen

versuche bePK kleingeschrieben, schaue im Internet funktionierende Beispiel an 
(folgender prominenter Link verwendet allerdings auch merkwürdige Großschreibung
Descending Order : CriteriaHibernateJava Tutorial
)
ansonsten kann ich persönlich nichts mehr beitragen


----------

