Where, Hibernate e List

2 respostas
Sandro.Santos

Oi galera,

Tenho duas VOs:

public class Menu {

private int cd_menu;

private String ds_menu;

private int nr_ordem;

private List secoes;
/** @hibernate.id generator-class=“native” <em>/

public int getCd_menu() {

return cd_menu;

}

public void setCd_menu(int cd_menu) {

this.cd_menu = cd_menu;

}

/</em>* @hibernate.property length=“100” <em>/

public String getDs_menu() {

return ds_menu;

}

public void setDs_menu(String ds_menu) {

this.ds_menu = ds_menu;

}

/</em>* @hibernate.property <em>/

public int getNr_ordem() {

return nr_ordem;

}

public void setNr_ordem(int nr_ordem) {

this.nr_ordem = nr_ordem;

}

/</em>* @hibernate.bag name=“secoes” cascade=“save-update” inverse="true’
  • @hibernate.collection-key column=“Cd_Menu”
  • @hibernate.collection-one-to-many class=“br.com.revista50emais.secao.Secao”
  • */
    public List getSecoes() {
    return secoes;
    }
    public void setSecoes(List secoes) {
    this.secoes = secoes;
    }
    }

e

public class Secao {

private int cd_secao;

private String ds_secao;

private String ds_liberada;

private String corpo;

private String olho;

private String foto;

private String box;

private String pergunta;

private int ordemsite;

private Menu menu;

private List materias;

/** @hibernate.bag name=“materias” cascade=“save-update” inverse="true’

  • @hibernate.collection-key column=“Cd_Secao”
  • @hibernate.collection-one-to-many class=“br.com.revista50emais.materia.Materia”
  • /
    public List getMaterias() {
    return materias;
    }
    public void setMaterias(List materias) {
    this.materias = materias;
    }
    /
    * @hibernate.many-to-one column=“Cd_Menu” class=“br.com.revista50emais.menu.Menu” /
    public Menu getMenu() {
    return menu;
    }
    public void setMenu(Menu menu) {
    this.menu = menu;
    }
    /
    * @hibernate.id generator-class=“native” /
    public int getCd_secao() {
    return cd_secao;
    }
    public void setCd_secao(int cd_secao) {
    this.cd_secao = cd_secao;
    }
    /
    * @hibernate.property length=“1” /
    public String getBox() {
    return box;
    }
    public void setBox(String box) {
    this.box = box;
    }
    /
    * @hibernate.property length=“1” /
    public String getCorpo() {
    return corpo;
    }
    public void setCorpo(String corpo) {
    this.corpo = corpo;
    }
    /
    * @hibernate.property length=“1” /
    public String getDs_liberada() {
    return ds_liberada;
    }
    public void setDs_liberada(String ds_liberada) {
    this.ds_liberada = ds_liberada;
    }
    /
    * @hibernate.property length=“100” /
    public String getDs_secao() {
    return ds_secao;
    }
    public void setDs_secao(String ds_secao) {
    this.ds_secao = ds_secao;
    }
    /
    * @hibernate.property length=“1” /
    public String getFoto() {
    return foto;
    }
    public void setFoto(String foto) {
    this.foto = foto;
    }
    /
    * @hibernate.property length=“1” /
    public String getOlho() {
    return olho;
    }
    public void setOlho(String olho) {
    this.olho = olho;
    }
    /
    * @hibernate.property /
    public int getOrdemsite() {
    return ordemsite;
    }
    public void setOrdemsite(int ordemsite) {
    this.ordemsite = ordemsite;
    }
    /
    * @hibernate.property length=“1” */
    public String getPergunta() {
    return pergunta;
    }
    public void setPergunta(String pergunta) {
    this.pergunta = pergunta;
    }

}

Dentro do Menu existe um “List secoes” que guarda as seções de cada menu, então eu utilizo o “fom Menu” para mostrar os menus e suas respectivas seções.

O problema é que preciso que dentro de cada menu venha ordenado por “ds_secao” que esta dentro das secoes.

Como posso dentro de um SELECT me referenciar a um atributo LIST, pois se secoes fosse Secao, ai não teria problema:
“select menu from Menu menu join Menu.secoes as secao order by secao.ds_secao”
Pois já utilizo desta forma dentro de outro relacionamento.

Poderia fazer um CAST?

[]s

2 Respostas

_fs

Na declaração one-to-many você pode declarar um order-by

&lt;bag lazy="true" name="secoes"	inverse="true" order-by="NomeDaColuna desc" table="tSecoes"&gt;
	&lt;key column="ID" /&gt;
	&lt;one-to-many class="meu.pacote.Secao" /&gt;
&lt;/bag&gt;

Ou você faz assim para pegar as secoes

List l = session.createCriteria( Secao.class ).addOrder( Order.asc( "ds_secao" ) ).list();
Sandro.Santos

Valeu Lipe deu certo. Como estou usando xDoclet para gerar o xml Hibernate ficou assim:

/** @hibernate.bag name="secoes" cascade="save-update" inverse="true" order-by="ds_secao asc"
 *  @hibernate.collection-key column="Cd_Menu"
 *  @hibernate.collection-one-to-many class="br.com.revista50emais.secao.Secao" hi 
 * */
public List getSecoes() {
    return secoes;
}

[]s

Criado 28 de fevereiro de 2005
Ultima resposta 28 de fev. de 2005
Respostas 2
Participantes 2