Order mit Hibernate

  • Themenstarter Themenstarter Mariee
  • Beginndatum Beginndatum
M

Mariee

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

Ich habe 2 Tabellen.
Die erste sind die Autoren

Java:
@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

Java:
@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:
Java:
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
 
Danke für die Antwort.

habe nun

Java:
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.
 

Neue Themen


Zurück
Oben