Dúvida no composite do Hibernate

4 respostas
P

Olá pessoal,
Tenho um mapeamento muitos para um e preciso retornar apenas alguns campos. Com o mapeamento que estou fazendo ele executa select em todos os campos, segue as classes, mapeamentos e select gerado....

Ps.: no xml troquei "<" e ">" por "a" pq o forum não aceita e dá pau.

//POJO
public class ExiCargo implements java.io.Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3835538178445863581L;

	// Fields    

	private Integer pkExiCargo;

	private Date timestamp;

	private Integer fkElemento;

	private Integer fkCargo;
	
	private Cargo cargo;
	
	private Elemento elemento;
	
	// Constructors

	public Cargo getCargo() {
		return cargo;
	}

	public void setCargo(Cargo cargo) {
		this.cargo = cargo;
	}

	public Elemento getElemento() {
		return elemento;
	}

	public void setElemento(Elemento elemento) {
		this.elemento = elemento;
	}

	/** default constructor */
	public ExiCargo() {
	}

	/** full constructor */
	public ExiCargo(Integer fkElemento, Integer fkCargo) {
		this.fkElemento = fkElemento;
		this.fkCargo = fkCargo;
	}

	// Property accessors
	public Integer getPkExiCargo() {
		return this.pkExiCargo;
	}

	public void setPkExiCargo(Integer pkExiCargo) {
		this.pkExiCargo = pkExiCargo;
	}

	public Date getTimestamp() {
		return this.timestamp;
	}

	public void setTimestamp(Date timestamp) {
		this.timestamp = timestamp;
	}

	public Integer getFkElemento() {
		return this.fkElemento;
	}

	public void setFkElemento(Integer fkElemento) {
		this.fkElemento = fkElemento;
	}

	public Integer getFkCargo() {
		return this.fkCargo;
	}

	public void setFkCargo(Integer fkCargo) {
		this.fkCargo = fkCargo;
	}
}
//MAPEAMENTO
a?xml version=&quot;1.0a
a!DOCTYPE hibernate-mapping PUBLIC &quot;-//Hibernate/Hibernate Mapping DTD 3.0//EN&quot;
&quot;http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&quot;a
a!-- Generated 07/08/2006 08:48:12 by Hibernate Tools 3.1.0.beta5 --a
ahibernate-mappinga
    aclass name=&quot;br.com.shc.teste.relacionado.ExiCargo&quot; table=&quot;exicargo&quot;a
                aid name=&quot;pkExiCargo&quot; type=&quot;java.lang.Integer&quot;a
            acolumn name=&quot;PkExiCargo&quot; /a
            agenerator class=&quot;native&quot;a/generatora
        a/ida
        atimestamp name=&quot;timestamp&quot; column=&quot;Timestamp&quot; /a
        
        amany-to-one name=&quot;cargo&quot; class=&quot;br.com.shc.database.cargo.Cargo&quot; fetch=&quot;join&quot;a
        	acolumn name=&quot;FkCargo&quot; not-null=&quot;true&quot;a
        		
        	a/columna
		a/many-to-onea
        
		amany-to-one name=&quot;elemento&quot; class=&quot;br.com.shc.database.elemento.Elemento&quot; fetch=&quot;join&quot;a
        	acolumn name=&quot;FkElemento&quot; not-null=&quot;true&quot;a
        		        	a/columna
        a/many-to-onea 
    a/classa
a/hibernate-mappinga
//SELECT GERADO
Hibernate: 
    select
        exicargo0_.PkExiCargo as PkExiCargo1_2_,
        exicargo0_.Timestamp as Timestamp1_2_,
        exicargo0_.FkCargo as FkCargo1_2_,
        exicargo0_.FkElemento as FkElemento1_2_,
        cargo1_.PkCargo as PkCargo0_0_,
        cargo1_.Timestamp as Timestamp0_0_,
        cargo1_.Descricao as Descricao0_0_,
        elemento2_.PkElemento as PkElemento2_1_,
        elemento2_.Timestamp as Timestamp2_1_,
        elemento2_.FkSubord as FkSubord2_1_,
        elemento2_.Nome as Nome2_1_,
        elemento2_.Codigo as Codigo2_1_,
        elemento2_.Sigla as Sigla2_1_,
        elemento2_.CNPJ as CNPJ2_1_,
        elemento2_.IE as IE2_1_ 
    from
        exicargo exicargo0_ 
    inner join
        cargo cargo1_ 
            on exicargo0_.FkCargo=cargo1_.PkCargo 
    inner join
        elemento elemento2_ 
            on exicargo0_.FkElemento=elemento2_.PkElemento 
    where
        exicargo0_.PkExiCargo=?

4 Respostas

rodrigoy

Tá muito ruim de ler… poste os arquivos como attach…

P

seguem os aquivos em anexo…
segue abaixo o select que ele gera quando faço um select na ExiCargo…

Hibernate:
select
exicargo0_.PkExiCargo as PkExiCargo1_2_,
exicargo0_.Timestamp as Timestamp1_2_,
exicargo0_.FkCargo as FkCargo1_2_,
exicargo0_.FkElemento as FkElemento1_2_,
cargo1_.PkCargo as PkCargo0_0_,
cargo1_.Timestamp as Timestamp0_0_,
cargo1_.Descricao as Descricao0_0_,
elemento2_.PkElemento as PkElemento2_1_,
elemento2_.Timestamp as Timestamp2_1_,
elemento2_.FkSubord as FkSubord2_1_,
elemento2_.Nome as Nome2_1_,
elemento2_.Codigo as Codigo2_1_,
elemento2_.Sigla as Sigla2_1_,
elemento2_.CNPJ as CNPJ2_1_,
elemento2_.IE as IE2_1_
from
exicargo exicargo0_
inner join
cargo cargo1_
on exicargo0_.FkCargo=cargo1_.PkCargo
inner join
elemento elemento2_
on exicargo0_.FkElemento=elemento2_.PkElemento
where
exicargo0_.PkExiCargo=?

===============================================

Muito Obrigado desde já!

_fs

O select em todos os campos ocorrerá a não ser que faça a query manualmente utilizando org.hibernate.Query ou utilizando Projections em uma Criteria.

Mas antes de achar que o select torna seu software lento, faça o teste.

P

Olá, vc poderia me passar um exemplo de mapeamento no hbm.xml e a query em hql?
Muito Obrigado!

Criado 8 de agosto de 2006
Ultima resposta 8 de ago. de 2006
Respostas 4
Participantes 3