1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Lazy em mapeamentos XML, no hibernate

Alguém sabe como trabalhar corretamente com o lazy no hibernate, em um mapeamento XML?

Tenho uma classe VITRINE e outra PRODUTO VITRINE. Eis os mapeamentos:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="Vitrine" table="VITRINE">
    <id column="CDVITRINE" length="10" name="cdVitrine" type="java.lang.Integer">
      <generator class="increment"/>
    </id>
    <property column="NOME" length="100" name="nome" not-null="false" type="java.lang.String"/>
    <property column="DESCRICAO" length="100" name="descricao" not-null="false" type="java.lang.String"/>
    <property column="STATUS" length="1" name="status" not-null="false" type="java.lang.Character"/>
    <property column="ORDEM" length="10" name="ordem" not-null="false" type="java.lang.Integer"/>
  </class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="ProdutoVitrine" table="PRODUTOVITRINE">
        <id column="CDPRODUTOVITRINE" length="10" name="cdProdutoVitrine" type="java.lang.Integer">
            <generator class="increment"/>
        </id>
        <property column="STATUS" length="1" name="status" not-null="false" type="java.lang.Character"/>
        <property column="DTINICIO" length="50" name="dtInicio" not-null="true" type="java.util.Calendar"/>
        <property column="DTFIM" length="50" name="dtFim" not-null="true" type="java.util.Calendar"/>
        <property column="HORAINICIO" length="5" name="horaInicio" not-null="true" type="java.lang.String"/>
        <property column="HORAFIM" length="5" name="horaFim" not-null="true" type="java.lang.String"/>

        <!-- Chave estrangeira -->
        <many-to-one class="Produto" column="CODIGOPRODUTO" name="produto"/>
        <many-to-one name="vitrine" class="Vitrine" column="CODIGOVITRINE" lazy="proxy"></many-to-one>  
    </class>

</hibernate-mapping>

Utilizei lazy="proxy" no many-to-one para a vitrine, no mapeamento produtoVitrine, porém ao realizar um for-each o SQL está trazendo todas as associações desses dois mapeamentos.

Alguma ideia, do que posso fazer?

  • tente colocar no mapeamento do relacionamento que deve sr lazy

    lazy="true"
    Cristian Urbainski   27 de jun de 2013
  • Cristian, lazy=true no mapeamento do relacionamento irá bloquear qualquer acesso que tento fazer ao mesmo, sendo assim, coloquei no many-to-many do mapeamento tb do produto, o lazy="proxy", aí trouxe apenas os dados que pesquisei, porém ao tentar acessar o produto usando "produtoVitrine.getProduto().getNmProduto()", dá erro de lazy... E no método em que utilizo pra listar a coleção de produtosVitrine, tentei usar "createCriteria("produto",JoinType.LEFT_OUTER_JOIN)", porém não funcionou pois já estou usando "createCriteria("vitrine",JoinType.LEFT_OUTER_JOIN)".

    aureliolima   27 de jun de 2013
  • Consegui resolver, retirando o lazy="false" dos mapeamentos referenciados tb no produto.

    OBS.: Infelizmente o GUJ impossibilita de marcar o tópico como resolvido, quando a solução foi resolvida por mim mesmo...

    aureliolima   27 de jun de 2013
  • Bopm dia aurelio para colocar como resolvido você posta a resposta e depois seta ela como resolvido ok.

    Jefferson Gandolfi   27 de jun de 2013
  • A resposta é o MEU comentário anterior.

    aureliolima   27 de jun de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags hibernate lazy xml ou faça a sua própria pergunta.