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

Problemas com relacionamento no Jasper Reports

Olá pessoal, vou postar o meu código e depois falo do problema ok. Segue abaixo

Model

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Model;

import Model.Endereco.Endereco;
import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.Transient;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

/**
 *
 * @author willian
 */
@Entity
@Table( name = "PESSOA" )
public class Pessoa implements Serializable {
    /* Atributos */
    private Long id;
    private Boolean ativo;    
    private String nome;
    private String sobrenome;
    private String cpfCnpj;
    private String rg;
    private String sexo;
    private Date dataNascimento;
    private String estadoCivil;
    private String email;
    private String telefoneFixo;
    private String telefoneCelular;
    private String nomeMae;
    private Date dataNascimentoMae;
    private String nomePai;
    private Date DataNascimentoPai;
    private Set<Endereco> endereco = new HashSet<>();
    private Set<QualificacaoPessoal> qualificacaoPessoal = new HashSet<>();
    private Set<CarreiraPessoal> carreiraPessoal = new HashSet<>();

    // contrutor padrão
    public Pessoa() {
    }

    // métodos setters
    public void setId(Long id) {
        this.id = id;
    }

    public void setAtivo(Boolean ativo) {
        this.ativo = ativo;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setSobrenome(String sobrenome) {
        this.sobrenome = sobrenome;
    }    

    public void setCpfCnpj(String cpfCnpj) {
        this.cpfCnpj = cpfCnpj;
    }

    public void setRg(String rg) {
        this.rg = rg;
    }

    public void setSexo( String sexo ) {
        this.sexo = sexo;
    }

    public void setDataNascimento( Date dataNascimento ) {
        this.dataNascimento = dataNascimento;
    }

    public void setEstadoCivil( String estadoCivil ) {
        this.estadoCivil = estadoCivil;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setTelefoneFixo(String telefoneFixo) {
        this.telefoneFixo = telefoneFixo;
    }

    public void setTelefoneCelular(String telefoneCelular) {
        this.telefoneCelular = telefoneCelular;
    }

    public void setNomeMae(String nomeMae) {
        this.nomeMae = nomeMae;
    }

    public void setDataNascimentoMae(Date dataNascimentoMae) {
        this.dataNascimentoMae = dataNascimentoMae;
    }

    public void setNomePai(String nomePai) {
        this.nomePai = nomePai;
    }

    public void setDataNascimentoPai(Date dataNascimentoPai) {
        this.DataNascimentoPai = dataNascimentoPai;
    }

    public void setEndereco( Set<Endereco> endereco ) {
        this.endereco = endereco;
    }

    public void setQualificacaoPessoal(Set<QualificacaoPessoal> qualificacaoPessoal) {
        this.qualificacaoPessoal = qualificacaoPessoal;
    }

    public void setCarreiraPessoal(Set<CarreiraPessoal> carreiraPessoal) {
        this.carreiraPessoal = carreiraPessoal;
    }



    /* métodos getters */
    @Id
//    mysql
//    @GenericGenerator(name="kaugen" , strategy="increment")
//    @GeneratedValue(generator="kaugen")
//    @Column( name = "id_pessoa", nullable=false, unique=true )

//    firebird
    @Column( name = "ID_PESSOA", nullable=false, unique=true )
    @GeneratedValue( generator = "sequence", strategy = GenerationType.AUTO )
    @SequenceGenerator( name = "sequence", sequenceName = "GEN_pessoa" )    

//    sql-server
//    @Column( name = "id_pessoa", nullable=false, unique=true )
//    @GeneratedValue( generator = "sequence", strategy = GenerationType.AUTO )
//    @SequenceGenerator( name = "sequence", sequenceName = "GEN_pessoa", allocationSize = 1 )
    public Long getId() {
        return id;
    }

    @Column( name = "ATIVO", nullable = false, unique = false, insertable = false, columnDefinition = "smallint default 0" )
    public Boolean isAtivo() {
        return ativo;
    }

    @Column( name = "NOME", length = 60, nullable = false, unique = false )
    public String getNome() {
        return nome;
    }

    @Column( name = "SOBRENOME", length = 100, nullable = false, unique = false )
    public String getSobrenome() {
        return sobrenome;
    }    

    @Column( name = "CPF", length = 11, nullable = true, unique = true )
    public String getCpfCnpj() {
        return cpfCnpj;
    }

    @Column( name = "RG", length = 13, nullable = true, unique = true )
    public String getRg() {
        return rg;
    }

    @Column( name = "SEXO", nullable = false, length = 9, unique = false )
    public String getSexo() {
        return sexo;
    }

    @Column( name = "DATA_NASCIMENTO", nullable = false, unique = false )
    @Temporal(javax.persistence.TemporalType.DATE)
    public Date getDataNascimento() {
        return dataNascimento;
    }

    @Column( name = "ESTADO_CIVIL", nullable = false, length = 15, unique = false )
    public String getEstadoCivil() {
        return estadoCivil;
    }

    @Column( name = "EMAIL", length = 160, nullable = true, unique = true )
    public String getEmail() {
        return email;
    }

    @Column( name = "TELEFONE_FIXO", length = 11, nullable = true, unique = false )
    public String getTelefoneFixo() {
        return telefoneFixo;
    }

    @Column( name = "TELEFONE_CELULAR", length = 11, nullable = true, unique = false )
    public String getTelefoneCelular() {
        return telefoneCelular;
    }

    @Column( name = "NOME_MAE", length = 160, nullable = true, unique = false )
    public String getNomeMae() {
        return nomeMae;
    }

    @Column( name = "DATA_NASCIMENTO_MAE", nullable = true, unique = false )
    @Temporal(javax.persistence.TemporalType.DATE)
    public Date getDataNascimentoMae() {
        return dataNascimentoMae;
    }

    @Column( name = "NOME_PAI", length = 160, nullable = true, unique = false )
    public String getNomePai() {
        return nomePai;
    }

    @Column( name = "DATA_NASCIMENTO_PAI", nullable = true, unique = false )
    @Temporal(javax.persistence.TemporalType.DATE)
    public Date getDataNascimentoPai() {
        return DataNascimentoPai;
    }

    @ManyToMany( cascade = CascadeType.ALL, fetch = FetchType.EAGER ) //LAZY )
    @JoinTable( name="PESSOA_HAS_ENDERECO", joinColumns = {
        @JoinColumn( name = "ID_PESSOA")}, inverseJoinColumns = {
        @JoinColumn(name="ID_ENDERECO")})
    public Set<Endereco> getEndereco() {
        return endereco;
    }

    @OneToMany( mappedBy="pessoa", cascade = CascadeType.ALL )
    public Set<QualificacaoPessoal> getQualificacaoPessoal() {
        return qualificacaoPessoal;
    }

    @OneToMany( mappedBy="pessoa", cascade = CascadeType.ALL )
    public Set<CarreiraPessoal> getCarreiraPessoal() {
        return carreiraPessoal;
    }



    /* Métodos implementados */
    @Override
    public String toString() {
        return nome;
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder().append( getNome() + getSobrenome() ).toHashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Pessoa other = (Pessoa) obj;
        return new EqualsBuilder().append( this.getId(), other.getId() ).isEquals();
    }

}
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Model.Endereco;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

/**
 *
 * @author willian
 */
@Entity
@Table( name = "endereco" )
public class Endereco implements Serializable {
    /* atributos */
    private Integer id;
    private String cep;
    private String logradouro;
    private String bairro;
    private String cidade;
    private String estado;
    private String pais;

    /* construtor padrão */
    public Endereco() {
    }

    /* métodos setters */
    public void setId(Integer id) {
        this.id = id;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public void setLogradouro(String logradouro) {
        this.logradouro = logradouro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public void setPais(String pais) {
        this.pais = pais;
    }

    /* Métodos getters */
    @Id
    @Column( name = "id_endereco", nullable = false, unique = true )
    @GeneratedValue( generator = "sequence", strategy = GenerationType.AUTO )
    @SequenceGenerator( name = "sequence", sequenceName = "GEN_endereco", allocationSize = 1 )
    public Integer getId() {
        return id;
    }

    @Column( name = "cep", nullable = false, length = 8, unique = false )
    public String getCep() {
        return cep;
    }

    @Column( name = "logradouro", nullable = true, length = 160, unique = false )
    public String getLogradouro() {
        return logradouro;
    }

    @Column( name = "bairro", nullable = false, length = 160, unique = false )
    public String getBairro() {
        return bairro;
    }

    @Column( name = "cidade", nullable = false, length = 160, unique = false )
    public String getCidade() {
        return cidade;
    }

    @Column( name = "estado", nullable = false, length = 100, unique = false )
    public String getEstado() {
        return estado;
    }

    @Column( name = "pais", nullable = false, length = 100, unique = false )
    public String getPais() {
        return pais;
    }

    /* Métodos implementados */
    @Override
    public String toString() {
        return cep;
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder().append( getId() + getCep() ).toHashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Endereco other = (Endereco) obj;
        return new EqualsBuilder().append( this.getId(), other.getId() ).isEquals();
    }

}

Arquivo funcionario.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="funcionario" language="groovy" pageWidth="555" pageHeight="802" columnWidth="535" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="4d89aac3-19cc-4af2-9240-0c32bceb4715">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="221"/>
    <style name="style1"/>
    <field name="nome" class="java.lang.String"/>
    <field name="email" class="java.lang.String"/>
    <field name="telefoneCelular" class="java.lang.String"/>
    <field name="sobrenome" class="java.lang.String"/>
    <field name="estadoCivil" class="java.lang.String"/>
    <field name="telefoneFixo" class="java.lang.String"/>
    <field name="sexo" class="java.lang.String"/>
    <field name="cep" class="java.lang.String"/>
    <field name="logradouro" class="java.lang.String"/>
    <background>
        <band/>
    </background>
    <title>
        <band height="72">
            <frame>
                <reportElement mode="Opaque" x="-20" y="-20" width="575" height="92" backcolor="#006699" uuid="4bfcb046-5c60-4ed6-a741-1773cdf41072"/>
                <staticText>
                    <reportElement x="20" y="20" width="258" height="43" forecolor="#FFFFFF" uuid="f20de73a-1159-42f2-984b-757fb1b1da05"/>
                    <textElement>
                        <font size="34" isBold="true"/>
                    </textElement>
                    <text><![CDATA[Funcionários]]></text>
                </staticText>
                <staticText>
                    <reportElement x="395" y="43" width="180" height="20" forecolor="#FFFFFF" uuid="7ea4ab9e-2ff8-4b4b-83ef-485382b8a5c0"/>
                    <textElement textAlignment="Right">
                        <font size="14" isBold="false"/>
                    </textElement>
                    <text><![CDATA[Relatório de contatos]]></text>
                </staticText>
            </frame>
        </band>
    </title>
    <pageHeader>
        <band height="28"/>
    </pageHeader>
    <columnHeader>
        <band height="24"/>
    </columnHeader>
    <detail>
        <band height="361">
            <textField>
                <reportElement x="13" y="43" width="156" height="20" uuid="b2f163f2-0308-405a-bbb5-e0eb1c7073d3"/>
                <textFieldExpression><![CDATA[$F{nome}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="13" y="166" width="113" height="20" uuid="7f61ca21-848b-488e-877e-e3bd13de2fdd"/>
                <textElement>
                    <font isBold="true"/>
                </textElement>
                <text><![CDATA[E-mail:]]></text>
            </staticText>
            <textField>
                <reportElement x="136" y="166" width="401" height="20" uuid="ecc297af-4aaa-4563-bc4c-2278da06a5d5"/>
                <textFieldExpression><![CDATA[$F{email}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="180" y="43" width="367" height="20" uuid="2db17060-39e7-4020-b0bc-87cf0022aa47"/>
                <textFieldExpression><![CDATA[$F{sobrenome}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="13" y="146" width="127" height="20" uuid="855e9ac8-04cc-42c8-9230-bf5bfc35871a"/>
                <textElement>
                    <font size="11" isBold="true"/>
                </textElement>
                <text><![CDATA[Formas de Contato:]]></text>
            </staticText>
            <textField>
                <reportElement x="136" y="186" width="112" height="20" uuid="a0fe15e5-34d2-485f-ae14-8a74860a4401"/>
                <textFieldExpression><![CDATA[$F{telefoneCelular}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="13" y="186" width="113" height="20" uuid="7e9e234d-6a76-44b2-9569-6d2feb9cb347"/>
                <textElement>
                    <font size="10" isBold="true"/>
                </textElement>
                <text><![CDATA[Celular:]]></text>
            </staticText>
            <textField>
                <reportElement x="384" y="186" width="100" height="20" uuid="9f20a79c-16f7-44d4-af88-74f6b6c176fa"/>
                <textFieldExpression><![CDATA[$F{telefoneFixo}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="261" y="186" width="113" height="20" uuid="8ca337f1-4ea3-433d-8f51-1e19067141c6"/>
                <textElement>
                    <font size="10" isBold="true"/>
                </textElement>
                <text><![CDATA[Fixo:]]></text>
            </staticText>
            <frame>
                <reportElement mode="Opaque" x="0" y="0" width="547" height="20" forecolor="#DAE7FE" backcolor="#DAE7FE" uuid="2c47c828-4b1b-438d-9c43-8168d1368a10"/>
                <staticText>
                    <reportElement x="13" y="3" width="100" height="17" uuid="67e0fcf0-2759-4957-b02c-9e6d4e73cb53"/>
                    <textElement>
                        <font size="12" isBold="true"/>
                    </textElement>
                    <text><![CDATA[Pessoa:]]></text>
                </staticText>
            </frame>
            <staticText>
                <reportElement x="13" y="74" width="235" height="20" uuid="841a155e-9e04-433e-ae43-fc9d30dd3ca2"/>
                <textElement>
                    <font size="11" isBold="true"/>
                </textElement>
                <text><![CDATA[Outras Informaçoes:]]></text>
            </staticText>
            <textField>
                <reportElement x="136" y="94" width="112" height="20" uuid="4e4ce47d-6ab0-4cf4-b6c4-a7c1ab854c58"/>
                <textFieldExpression><![CDATA[$F{estadoCivil}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="13" y="94" width="113" height="20" uuid="d944ca8a-e70e-4eb1-9bb1-191e4fa85a25"/>
                <textElement>
                    <font isBold="true"/>
                </textElement>
                <text><![CDATA[Estado Civil:]]></text>
            </staticText>
            <textField>
                <reportElement x="136" y="114" width="112" height="20" uuid="0ed71dff-2e60-497a-914b-9aeefa09e173"/>
                <textFieldExpression><![CDATA[$F{sexo}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="13" y="114" width="113" height="20" uuid="10ab5601-c30f-480f-8527-ffcb8e952641"/>
                <textElement>
                    <font isBold="true"/>
                </textElement>
                <text><![CDATA[Sexo:]]></text>
            </staticText>
            <staticText>
                <reportElement x="13" y="23" width="156" height="20" uuid="fa5c7d39-cc5e-4760-8ad2-20fc159d0fb9"/>
                <textElement>
                    <font size="12" isBold="true"/>
                </textElement>
                <text><![CDATA[Nome:]]></text>
            </staticText>
            <staticText>
                <reportElement x="180" y="23" width="367" height="20" uuid="a785b71f-3e8d-4499-bb36-5058012b4431"/>
                <textElement>
                    <font size="12" isBold="true"/>
                </textElement>
                <text><![CDATA[Sobrenome:]]></text>
            </staticText>
            <staticText>
                <reportElement x="13" y="215" width="100" height="20" uuid="1814c8e4-8099-4a4e-a88e-ad2e11cf56a2"/>
                <textElement>
                    <font size="11" isBold="true"/>
                </textElement>
                <text><![CDATA[Endereço:]]></text>
            </staticText>
            <staticText>
                <reportElement x="13" y="235" width="100" height="20" uuid="66e7a855-ab05-4125-9b9b-ff9d776e5b60"/>
                <textElement>
                    <font size="11" isBold="true"/>
                </textElement>
                <text><![CDATA[cep:]]></text>
            </staticText>
            <staticText>
                <reportElement x="13" y="256" width="100" height="20" uuid="f2e902c7-dc77-450f-aa37-30a5483b6c0d"/>
                <textElement>
                    <font size="11" isBold="true"/>
                </textElement>
                <text><![CDATA[logradouro:]]></text>
            </staticText>
            <staticText>
                <reportElement x="13" y="276" width="100" height="20" uuid="30e77f02-f759-470a-a57f-b7b7d9c7d6c9"/>
                <textElement>
                    <font size="11" isBold="true"/>
                </textElement>
                <text><![CDATA[bairro:]]></text>
            </staticText>
            <staticText>
                <reportElement x="13" y="296" width="100" height="20" uuid="14321c86-8165-452e-bfd2-7db7d6f6b1b0"/>
                <textElement>
                    <font size="11" isBold="true"/>
                </textElement>
                <text><![CDATA[cidade:]]></text>
            </staticText>
            <staticText>
                <reportElement x="13" y="316" width="100" height="20" uuid="0b9bb71c-043f-4910-a625-6eccd0ddfd45"/>
                <textElement>
                    <font size="11" isBold="true"/>
                </textElement>
                <text><![CDATA[estado:]]></text>
            </staticText>
            <staticText>
                <reportElement x="13" y="336" width="100" height="20" uuid="de7b472b-6194-428c-ae5e-402bb484efec"/>
                <textElement>
                    <font size="11" isBold="true"/>
                </textElement>
                <text><![CDATA[pais:]]></text>
            </staticText>
            <textField>
                <reportElement x="136" y="235" width="401" height="20" uuid="bd13c864-907f-4fb1-91c6-d61f48ed946e"/>
                <textFieldExpression><![CDATA[$F{cep}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="136" y="256" width="401" height="20" uuid="974063f7-48cf-434a-967a-f36fa933f5f0"/>
                <textFieldExpression><![CDATA[$F{logradouro}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
    <columnFooter>
        <band/>
    </columnFooter>
    <pageFooter>
        <band height="45">
            <textField>
                <reportElement mode="Opaque" x="0" y="30" width="515" height="13" backcolor="#E6E6E6" uuid="0edb778c-a2ab-4596-af24-90d91d65bfad"/>
                <textElement textAlignment="Right"/>
                <textFieldExpression><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Report">
                <reportElement mode="Opaque" x="515" y="30" width="40" height="13" backcolor="#E6E6E6" uuid="24fdc492-b1ab-4db7-93b0-aaf97c489404"/>
                <textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>
            <textField pattern="EEEEE dd MMMMM yyyy">
                <reportElement x="0" y="30" width="100" height="13" uuid="4a04f4d2-0a82-4fbf-b4c6-faac149a0873"/>
                <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
            </textField>
        </band>
    </pageFooter>
    <summary>
        <band/>
    </summary>
</jasperReport>

Agora vou descrever o problema: Quando eu uso o relatório sem os relacionamentos não tenho problema algum, mas quando eu uso não encontra os atributos do relacionamento no bean.

Trecho de código que chama o jasperreport passando uma lista de Pessoa

        Session session = HibernateGestorUtil.getFabricaSessao().openSession();
        Transaction transaction = session.beginTransaction();

        Query query = session.createQuery( "from Pessoa p");

        transaction.commit();

        List<Pessoa> pessoas = query.list();

        try {
            JasperReport report = JasperCompileManager.compileReport( "/home/willian/Dropbox_willian_itauna_yahoo.com.br/Dropbox/NetBeansProjects/Java/Gestor Hibernate/Gestor/src/Relatorios/Funcionario/funcionario.jrxml" );
            JasperPrint print = JasperFillManager.fillReport( report, null, new JRBeanCollectionDataSource( pessoas ) );
            JasperExportManager.exportReportToPdfFile( print, "/home/willian/Dropbox_willian_itauna_yahoo.com.br/Dropbox/NetBeansProjects/Java/Gestor Hibernate/Gestor/src/Relatorios/Funcionario/funcionario.pdf" );
        } catch (JRException ex) {
            System.err.println("Erro JasperReport");
            System.err.println( ex.getMessage() );
        }

Bom, como se pode ver eu estou passando uma lista de pessoas que contem uma lista - Set de enderecos. Os demais relacionamentos não estão sendo usado no meu exemplo, sendo apenas Pessoas e Enderecos.

  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!

1 resposta

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