# Order mit Hibernate



## Mariee (11. Nov 2011)

Hallo,
ich habe eine Frage zur Sortierung von Hibernate-Abfrage.

Ich habe 2 Tabellen.
Die erste sind die Autoren


```
@Entity
class Autor
{
	int id;
	String name;
	
	@Id
    @GeneratedValue(generator="increment")
	@GenericGenerator(name="increment", strategy = "increment")
    @Column(name="id", nullable=false)
    public int getId()
    {
        return id;
    }
    
    public void setId(int id)
    {
        this.id = id;
    }
	
	@Column(name="name", nullable=false)
    public String getName()
    {
        return name;
    }
    
    public void setName(String name)
    {
        this.name = name;
    }
}
```

In der zweiten sind Bücher in der ein Autor als ManyToOne-Beziehung gespeichert ist - muss aber kein vorkommen


```
@Entity
class Buch
{
	int id;
	String name;
	Autor autor;
	
	@Id
    @GeneratedValue(generator="increment")
	@GenericGenerator(name="increment", strategy = "increment")
    @Column(name="id", nullable=false)
    public int getId()
    {
        return id;
    }
    
    public void setId(int id)
    {
        this.id = id;
    }
	
	

	@Column(name="name", nullable=false)
    public String getName()
    {
        return name;
    }
    
    public void setName(String name)
    {
        this.name = name;
    }
	
	@ManyToOne(optional = true)
	@JoinColumn(name = "autor")
    public User getAutor()
    {
        return autor;
    }
    
    public void setAutor(User autor)
    {
    	this.autor = autor;
    }
}
```

Die Tabellen haben noch mehr Inhalte, z.B. haben die Bücher noch einen Verlag.

Ich mache nun eine Abfrage in der ich alle Bücher eines bestimmten Verlags suche

Das Ergebnis würde ich gerne sortieren: Als erst nach dem Namen der Autoren, dann nach dem Namen des Buches.
Ich habe es so versucht:

```
Criteria crit = session.createCriteria(Buch.class);
crit.add(Restrictions.eq("verlag", "nach was gesucht werden soll"));
crit.addOrder( Order.asc("autor.name") );
crit.addOrder( Order.asc("name") );
```

Da bekomme ich aber die Fehlermeldung:
could not resolve property: autor.name of: Buch

Wenn ich anstelle von crit.addOrder( Order.asc("autor.name") ); nach crit.addOrder( Order.asc("autor") ); sortiere geht alles wunderbar - alelrdings sortiert er hier nach der ID von den Autoren. Das ist nicht gewünscht.

Ich denke es wird eine leichte Lösung geben auf die ich gerade nicht komme. Vielleicht kann wer von euch mit geschulten Auge schnell das Problem sehen 

Danke für die Hilfe


----------



## SlaterB (11. Nov 2011)

java - Hibernate: ORDER BY using Criteria API - Stack Overflow


----------



## Mariee (11. Nov 2011)

Danke für die Antwort.

habe nun


```
Criteria crit = session.createCriteria(Buch.class);
crit.add(Restrictions.eq("verlag", "nach was gesucht werden soll"));
crit("autor", "autorInfos");
crit.addOrder( Order.asc("autorInfos.name") );
crit.addOrder( Order.asc("name") );
```

funktioniert wirklich.......... fast

Nun verschluckt er die einträge, bei denen kein Autor eingetragen (null) ist.

Das sollte natürlich nicht sein.


----------



## SlaterB (11. Nov 2011)

Jair Rillo Junior’s blog  How to use LEFT JOIN in Hibernate Criteria


----------

