Ir para conteúdo
Fórum Script Brasil
  • 0

Diversos e estranhos SELECT no Hibernate


Marcelo V. V. Magalhães

Pergunta

Caros amigos,

Estou desenvolvendo minha primeira aplicação usando Hibernate e está acontecendo algo estranho. Tenho uma estrutura de classe de um sistema contábeil mais ou menos assim; três classes, conta sintética, conta analítica e lançamento, com as seguinte associações:

- uma conta sintética possui muitas contas sintéticas (auto-relacionamento não obrigatório);

- uma conta sintética possui um ou mais contas analiíticas;

- uma lançamento possui uma ou mais contas analíticas para débito e uma ou mais contas analíticas para crédito;

- uma conta analítica possui diversos lançamentos (de crédito e de débito);

Ou seja a associação entre conta analítica e lançamento é N para N duas vezes (de créditos e de débitos), sendo assim criei tabelas para este relacionamento muitos para muitos (mas não há classes para tais, visto que não há necessidade)

Estou usando o Hibernate 3 com PostGres 8.4.1.

A inclusão, recuperação, alteração, etc... está tudo ok, contudo estou tendo alguns probleminhas. Quando faço alguma operação de inclusão, alteração, etc.. o Hibernate faz alguns SELECTs em todas as minhas tabelas, ver log da console abaixo:

Criou o serviço da conta sintética  
22/08/2010 20:09:43-org.hibernate.cfg.annotations.Version <clinit>  
INFO: Hibernate Annotations 3.3.0.GA  
22/08/2010 20:09:43-org.hibernate.cfg.Environment <clinit>  
INFO: Hibernate 3.2.5  
22/08/2010 20:09:43-org.hibernate.cfg.Environment <clinit>  
INFO: hibernate.properties not found  
22/08/2010 20:09:43-org.hibernate.cfg.Environment buildBytecodeProvider  
INFO: Bytecode provider name : cglib  
22/08/2010 20:09:43-org.hibernate.cfg.Environment <clinit>  
INFO: using JDK 1.4 java.sql.Timestamp handling  
22/08/2010 20:09:43-org.hibernate.ejb.Version <clinit>  
INFO: Hibernate EntityManager 3.3.1.GA  
22/08/2010 20:09:44-org.hibernate.cfg.AnnotationBinder bindClass  
INFO: Binding entity from annotated class: modelo.Lancamento  
22/08/2010 20:09:44-org.hibernate.cfg.annotations.EntityBinder bindTable  
INFO: Bind entity modelo.Lancamento on table Lancamento  
22/08/2010 20:09:44-org.hibernate.cfg.AnnotationBinder bindClass  
INFO: Binding entity from annotated class: modelo.ContaContabilSintetica  
22/08/2010 20:09:44-org.hibernate.cfg.annotations.EntityBinder bindTable  
INFO: Bind entity modelo.ContaContabilSintetica on table ContaContabilSintetica  
22/08/2010 20:09:44-org.hibernate.cfg.AnnotationBinder bindClass  
INFO: Binding entity from annotated class: modelo.ContaContabilAnalitica  
22/08/2010 20:09:44-org.hibernate.cfg.annotations.EntityBinder bindTable  
INFO: Bind entity modelo.ContaContabilAnalitica on table ContaContabilAnalitica  
22/08/2010 20:09:44-org.hibernate.cfg.AnnotationBinder bindClass  
INFO: Binding entity from annotated class: modelo.Reserva  
22/08/2010 20:09:44-org.hibernate.cfg.annotations.EntityBinder bindTable  
INFO: Bind entity modelo.Reserva on table RESERVA  
22/08/2010 20:09:44-org.hibernate.cfg.AnnotationBinder bindClass  
INFO: Binding entity from annotated class: modelo.Cor  
22/08/2010 20:09:44-org.hibernate.cfg.annotations.EntityBinder bindTable  
INFO: Bind entity modelo.Cor on table COR  
22/08/2010 20:09:44-org.hibernate.cfg.annotations.CollectionBinder bindOneToManySecondPass  
INFO: Mapping collection: modelo.ContaContabilSintetica.contasContabeisAnaliticas -> ContaContabilAnalitica  
22/08/2010 20:09:44-org.hibernate.cfg.annotations.CollectionBinder bindOneToManySecondPass  
INFO: Mapping collection: modelo.ContaContabilSintetica.contasContabeisSinteticasFilhas -> ContaContabilSintetica  
22/08/2010 20:09:44-org.hibernate.validator.Version <clinit>  
INFO: Hibernate Validator 3.0.0.GA  
22/08/2010 20:09:45-org.hibernate.connection.C3P0ConnectionProvider configure  
INFO: C3P0 using driver: org.postgresql.Driver at URL: jdbc:postgresql://127.0.0.1:5432/JavaDB  
22/08/2010 20:09:45-org.hibernate.connection.C3P0ConnectionProvider configure  
INFO: Connection properties: {user=marcelo, password=****, autocommit=true, release_mode=auto}  
22/08/2010 20:09:45-org.hibernate.connection.C3P0ConnectionProvider configure  
INFO: autocommit mode: true  
22/08/2010 20:09:45-com.mchange.v2.log.MLog <clinit>  
INFO: MLog clients using log4j logging.  
22/08/2010 20:09:45-com.mchange.v2.c3p0.C3P0Registry banner  
INFO: Initializing c3p0-0.9.1 [built 16-January-2007 14:46:42; debug? true; trace: 10]  
22/08/2010 20:09:45-com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager  
INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@ef220090 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@690bc899 [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge13c8a17avx571dzw4fw|32d8ca48, idleConnectionTestPeriod -> 0, initialPoolSize -> 5, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 600, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 20, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 5, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@3595583f [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 1hge13c8a17avx571dzw4fw|3e0d1329, jdbcUrl -> jdbc:postgresql://127.0.0.1:5432/JavaDB, properties -> {user=******, password=******, autocommit=true, release_mode=auto} ], preferredTestQuery -> null, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 1hge13c8a17avx571dzw4fw|52205756, numHelperThreads -> 3 ]  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: RDBMS: PostgreSQL, version: 8.4.1  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: JDBC driver: PostgreSQL Native Driver, version: PostgreSQL 8.0 JDBC2 with NO SSL (build 310)  
22/08/2010 20:09:45-org.hibernate.dialect.Dialect <init>  
INFO: Using dialect: org.hibernate.dialect.PostgreSQLDialect  
22/08/2010 20:09:45-org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory  
INFO: Transaction strategy: org.hibernate.transaction.JDBCTransactionFactory  
22/08/2010 20:09:45-org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup  
INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Automatic flush during beforeCompletion(): disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Automatic session close at end of transaction: disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: JDBC batch size: 15  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: JDBC batch updates for versioned data: disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Scrollable result sets: enabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: JDBC3 getGeneratedKeys(): disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Connection release mode: auto  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Default batch fetch size: 1  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Generate SQL with comments: disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Order SQL updates by primary key: disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Order SQL inserts for batching: disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory  
INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory  
22/08/2010 20:09:45-org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>  
INFO: Using ASTQueryTranslatorFactory  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Query language substitutions: {}  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: JPA-QL strict compliance: enabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Second-level cache: enabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Query cache: disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory createCacheProvider  
INFO: Cache provider: org.hibernate.cache.NoCacheProvider  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Optimize cache for minimal puts: disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Structured second-level cache entries: disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Echoing all SQL to stdout  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Statistics: disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Deleted entity synthetic identifier rollback: disabled  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Default entity-mode: pojo  
22/08/2010 20:09:45-org.hibernate.cfg.SettingsFactory buildSettings  
INFO: Named query checking : enabled  
22/08/2010 20:09:45-org.hibernate.impl.SessionFactoryImpl <init>  
INFO: building session factory  
22/08/2010 20:09:46-org.hibernate.impl.SessionFactoryObjectFactory addInstance  
INFO: Not binding factory to JNDI, no JNDI name configured  
Hibernate:   
    select  
        contaconta0_.contaContabilSinteticaID as contaCon1_1_0_,  
        contaconta0_.contaContabilSinteticaPai as contaCon5_1_0_,  
        contaconta0_.grupoContabil as grupoCon2_1_0_,  
        contaconta0_.nome as nome1_0_,  
        contaconta0_.observacao as observacao1_0_   
    from  
        ContaContabilSintetica contaconta0_   
    where  
        contaconta0_.contaContabilSinteticaID=?  
Hibernate:   
    select  
        contascont0_.contaContabilSinteticaID as contaCon4_1_,  
        contascont0_.contaContabilAnaliticaID as contaCon1_1_,  
        contascont0_.contaContabilAnaliticaID as contaCon1_2_0_,  
        contascont0_.contaContabilSinteticaID as contaCon4_2_0_,  
        contascont0_.nome as nome2_0_,  
        contascont0_.observacao as observacao2_0_   
    from  
        ContaContabilAnalitica contascont0_   
    where  
        contascont0_.contaContabilSinteticaID=?  
Hibernate:   
    select  
        lancamento0_.contaContabilAnaliticaID as contaCon1_1_,  
        lancamento0_.lancamentoID as lancamen2_1_,  
        lancamento1_.lancamentoID as lancamen1_0_0_,  
        lancamento1_.dataCadastro as dataCada2_0_0_,  
        lancamento1_.historico as historico0_0_,  
        lancamento1_.valor as valor0_0_   
    from  
        ContaCreditada lancamento0_   
    left outer join  
        Lancamento lancamento1_   
            on lancamento0_.lancamentoID=lancamento1_.lancamentoID   
    where  
        lancamento0_.contaContabilAnaliticaID=?  
Hibernate:   
    select  
        lancamento0_.contaContabilAnaliticaID as contaCon1_1_,  
        lancamento0_.lancamentoID as lancamen2_1_,  
        lancamento1_.lancamentoID as lancamen1_0_0_,  
        lancamento1_.dataCadastro as dataCada2_0_0_,  
        lancamento1_.historico as historico0_0_,  
        lancamento1_.valor as valor0_0_   
    from  
        ContaDebitada lancamento0_   
    left outer join  
        Lancamento lancamento1_   
            on lancamento0_.lancamentoID=lancamento1_.lancamentoID   
    where  
        lancamento0_.contaContabilAnaliticaID=?  
Hibernate:   
    select  
        lancamento0_.contaContabilAnaliticaID as contaCon1_1_,  
        lancamento0_.lancamentoID as lancamen2_1_,  
        lancamento1_.lancamentoID as lancamen1_0_0_,  
        lancamento1_.dataCadastro as dataCada2_0_0_,  
        lancamento1_.historico as historico0_0_,  
        lancamento1_.valor as valor0_0_   
    from  
        ContaCreditada lancamento0_   
    left outer join  
        Lancamento lancamento1_   
            on lancamento0_.lancamentoID=lancamento1_.lancamentoID   
    where  
        lancamento0_.contaContabilAnaliticaID=?  
Hibernate:   
    select  
        lancamento0_.contaContabilAnaliticaID as contaCon1_1_,  
        lancamento0_.lancamentoID as lancamen2_1_,  
        lancamento1_.lancamentoID as lancamen1_0_0_,  
        lancamento1_.dataCadastro as dataCada2_0_0_,  
        lancamento1_.historico as historico0_0_,  
        lancamento1_.valor as valor0_0_   
    from  
        ContaDebitada lancamento0_   
    left outer join  
        Lancamento lancamento1_   
            on lancamento0_.lancamentoID=lancamento1_.lancamentoID   
    where  
        lancamento0_.contaContabilAnaliticaID=?  
Hibernate:   
    select  
        contascont0_.contaContabilSinteticaPai as contaCon5_1_,  
        contascont0_.contaContabilSinteticaID as contaCon1_1_,  
        contascont0_.contaContabilSinteticaID as contaCon1_1_0_,  
        contascont0_.contaContabilSinteticaPai as contaCon5_1_0_,  
        contascont0_.grupoContabil as grupoCon2_1_0_,  
        contascont0_.nome as nome1_0_,  
        contascont0_.observacao as observacao1_0_   
    from  
        ContaContabilSintetica contascont0_   
    where  
        contascont0_.contaContabilSinteticaPai=?  
Recuperou conta sintética ID = 5  
Conta sintética 1  
ATIVO
Abaixo está as minhas classes de modelo com as anotações: ContaSintetica
/** 
* As contas contábeis sintéticas servem somente para agrupar as contas contábeis 
* analíticas, não sendo permitido lançamentos nestas contas. Outra boa finalidade 
* para estas contas é a geração de relatórios sintéticos para niveis gerenciais 
* de uma empresa, visto que tais contas sintéticas possuem o seu saldo como sendo 
* o somatório dos saldos de suas contas analíticas. Toda conta contábil sintética 
* deve percenter a um grupo contábil, ativo, passivo ou de resultado, sendo esta 
* última dividida em 3 grupos, contas de receitas, contas de despesas e contas de 
* apuração de resultado. Estes 3 grupo deverão sempre ter seus saldos 
* transportados para as contas patrimonias, ativo e passivo, ficando assim com 
* saldo zero ao final de um exercício contábil. 
* @author Marcelo Magalhães 
* @version 1.0 
* @created 31-jul-2010 01:45:54 
*/  
package modelo;  
  
import java.io.Serializable;  
import java.util.HashSet;  
import java.util.Iterator;  
import java.util.Set;  
  
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.ManyToOne;  
import javax.persistence.OneToMany;  
import javax.persistence.SequenceGenerator;  
import javax.persistence.Table;  
import javax.persistence.Transient;  
  
import org.hibernate.annotations.Cascade;  
import org.hibernate.annotations.CascadeType;  
import org.hibernate.annotations.Fetch;  
import org.hibernate.annotations.FetchMode;  
  
@Entity  
@Table(name="ContaContabilSintetica")  
  
@SequenceGenerator(name="CONTACONTABILSINTETICA_SEQ", sequenceName="CONTACONTABILSINTETICA_SEQ", allocationSize=1)  
public class ContaContabilSintetica implements Serializable   
{  
  
    private static final long serialVersionUID = 1;  
    private static final boolean TRUE = true;  
    private static final boolean FALSE = false;  
    /** 
     * Lista das contas analíticas pertencentes a esta conta sintética. 
     */  
    private Set<ContaContabilAnalitica> contasContabeisAnaliticas;  
    /** 
     * Identificador da conta sintética. Sequencia gerada pelo banco de dados. 
     */  
    private Long contaContabilSinteticaID;  
    /** 
     * Identificador da conta contábil sintética (pai) que contém esta conta contábil 
     * sintética (filho). 
     */  
    private ContaContabilSintetica contaContabilSinteticaPai;  
    /** 
     * Classificador do tipo de grupo ao qual pertence a conta contábil sintética. 
     * Este classificador é uma enumeração. 
     */  
    private int grupoContabil;  
    /** 
     * Nome da conta contábil. Alfanumérico de até 70 caracteres. 
     */  
    private String nome;  
    /** 
     * Campo destinado a observações sobre a conta. 
     */  
    private String observacao;  
    private Set<ContaContabilSintetica> contasContabeisSinteticasFilhas;  
  
    /** 
     * Construtor padrão 
     */  
    public ContaContabilSintetica()  
    {  
        this.contasContabeisAnaliticas = new HashSet<ContaContabilAnalitica>();  
        this.contasContabeisSinteticasFilhas = new HashSet<ContaContabilSintetica>();  
    }  
  
    /** 
     * Construtor com argumentos. 
     *  
     * @param contaContabilSinteticaID 
     * @param grupoContabil 
     * @param nome 
     * @param observacao 
     * @param contaContabilSinteticaPai 
     */  
    public ContaContabilSintetica(long contaContabilSinteticaID, GrupoContabil grupoContabil, String nome, String observacao, ContaContabilSintetica contaContabilSinteticaPai)  
    {  
        this.contaContabilSinteticaID = contaContabilSinteticaID;  
        this.grupoContabil = grupoContabil.getIdentificador();  
        this.nome = nome;  
        this.observacao = observacao;  
        this.contaContabilSinteticaPai = contaContabilSinteticaPai;  
      
        this.contasContabeisAnaliticas = new HashSet<ContaContabilAnalitica>();  
        this.contasContabeisSinteticasFilhas = new HashSet<ContaContabilSintetica>();  
    }  
  
    @Id  
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CONTACONTABILSINTETICA_SEQ")  
    @Column(name="contaContabilSinteticaID", unique=TRUE, nullable=TRUE, insertable=FALSE, updatable=FALSE)  
    public Long getContaContabilSinteticaID()  
    {  
        return this.contaContabilSinteticaID;  
    }  
  
    @Column(name="nome", unique=FALSE, nullable=FALSE, insertable=TRUE, updatable=TRUE, length=255)  
    public String getNome()  
    {  
        return this.nome;  
    }  
  
    @Column(name="observacao", unique=FALSE, nullable=TRUE, insertable=TRUE, updatable=TRUE, length=255)  
    public String getObservacao()  
    {  
        return this.observacao;  
    }  
  
    @Column(name="grupoContabil", unique=FALSE, nullable=FALSE, insertable=TRUE, updatable=TRUE)  
    public GrupoContabil getGrupoContabil()  
    {  
            int i;    
            for (GrupoContabil g : GrupoContabil.values())  
            {  
                i = g.getIdentificador();  
                if (i == grupoContabil)  
                {  
                return g;  
                }  
            }  
            return null;  
    }  
  
    @OneToMany(mappedBy="contaContabilSintetica", fetch = FetchType.LAZY)  
    //@Fetch(FetchMode.SELECT)  
    @Cascade(CascadeType.DELETE_ORPHAN)  
    public Set<ContaContabilAnalitica> getContasContabeisAnaliticas()  
    {  
        return this.contasContabeisAnaliticas;  
    }  
      
    @OneToMany(mappedBy="contaContabilSinteticaPai",fetch=FetchType.LAZY)  
    @Fetch(FetchMode.SELECT)  
    @Cascade(CascadeType.DELETE_ORPHAN)  
    public Set<ContaContabilSintetica> getContasContabeisSinteticasFilhas()  
    {  
        return this.contasContabeisSinteticasFilhas;  
    }  
      
    @ManyToOne(fetch = FetchType.LAZY)  
    @JoinColumn(name="contaContabilSinteticaPai")  
    @Fetch(FetchMode.SELECT)  
    public ContaContabilSintetica getContaContabilSinteticaPai()  
    {  
        return this.contaContabilSinteticaPai;  
    }  
  
    /** 
     *  
     * @param contaContabilSinteticaID 
     */  
    public void setContaContabilSinteticaID(Long contaContabilSinteticaID)  
    {  
        this.contaContabilSinteticaID = contaContabilSinteticaID;  
    }  
  
    /** 
     *  
     * @param nome 
     */  
    public void setNome(String nome)  
    {  
        this.nome = nome;  
    }  
  
    /** 
     *  
     * @param observacao 
     */  
    public void setObservacao(String observacao)  
    {  
        this.observacao = observacao;  
    }  
  
    /** 
     *  
     * @param grupoContabil 
     */  
    public void setGrupoContabil(GrupoContabil grupoContabil)  
    {  
        this.grupoContabil = grupoContabil.getIdentificador();  
    }  
  
    /** 
     *  
     * @param contasContabeisAnaliticas 
     */  
    public void setContasContabeisAnaliticas(Set<ContaContabilAnalitica> contasContabeisAnaliticas)  
    {  
        Iterator<ContaContabilAnalitica> iterator = contasContabeisAnaliticas.iterator();  
      
        while (iterator.hasNext())  
        {  
            ContaContabilAnalitica contaAnalitica = (ContaContabilAnalitica)iterator.next();  
            this.adicionarContaContabilAnalitica(contaAnalitica);  
        }   
    }  
  
    /** 
     *  
     * @param contaContabilSinteticaPai 
     */  
    public void setContaContabilSinteticaPai(ContaContabilSintetica contaContabilSinteticaPai)  
    {  
        this.contaContabilSinteticaPai = contaContabilSinteticaPai;  
    }  
  
    /** 
     *  
     * @param contasContabeisSinteticasFilhas 
     */  
    public void setContasContabeisSinteticasFilhas(Set<ContaContabilSintetica> contasContabeisSinteticasFilhas)  
    {  
        Iterator<ContaContabilSintetica> iterator = contasContabeisSinteticasFilhas.iterator();  
      
        while (iterator.hasNext())  
        {  
            ContaContabilSintetica contaSintetica = (ContaContabilSintetica)iterator.next();  
            this.adicionarContaContabilSinteticaFilha(contaSintetica);  
        }   
    }  
  
    /** 
     *  
     * @param contaContabilAnalitica 
     */  
    @Transient  
    public void adicionarContaContabilAnalitica(ContaContabilAnalitica contaContabilAnalitica)  
    {  
        if (!this.getContasContabeisAnaliticas().contains(contaContabilAnalitica))  
        {  
            this.contasContabeisAnaliticas.add(contaContabilAnalitica);  
            contaContabilAnalitica.adicionarContaContabilSintetica(this);  
        }  
    }  
  
    /** 
     *  
     * @param contaContabilAnalitica 
     */  
    @Transient  
    public void removerContaContabilAnalitica(ContaContabilAnalitica contaContabilAnalitica)  
    {  
        if (this.getContasContabeisAnaliticas().contains(contaContabilAnalitica))  
        {  
            this.contasContabeisAnaliticas.remove(contaContabilAnalitica);  
            contaContabilAnalitica.removerContaContabilSintetica(this);  
        }  
    }  
  
    /** 
     *  
     * @param contaContabilSinteticaFilha 
     */  
    @Transient  
    public void adicionarContaContabilSinteticaFilha(ContaContabilSintetica contaContabilSinteticaFilha)  
    {  
        if (!this.getContasContabeisSinteticasFilhas().contains(contaContabilSinteticaFilha))  
        {  
            this.contasContabeisSinteticasFilhas.add(contaContabilSinteticaFilha);  
        }  
    }  
  
    /** 
     *  
     * @param contaContabilSinteticaFilha 
     */  
    @Transient  
    public void revomerContaContabilSinteticaFilha(ContaContabilSintetica contaContabilSinteticaFilha)  
    {  
        if (this.getContasContabeisSinteticasFilhas().contains(contaContabilSinteticaFilha))  
        {  
            this.contasContabeisSinteticasFilhas.remove(contaContabilSinteticaFilha);  
        }  
    }  
  
    /** 
     * Saldo total da conta contábil. Nas contas contábeis analíticas é a diferença 
     * entre os lançamento de crédito e os de débito. Já nas contas contábies 
     * sintéticas, o saldo, é o somatório dos saldos das contas contábeis analí ticas 
     * pertencentes a esta conta. 
     */  
    @Transient  
    public float getSaldo()  
    {  
        Iterator<ContaContabilAnalitica> iterator = contasContabeisAnaliticas.iterator();  
      
        float saldoTotal = 0;  
      
        while (iterator.hasNext())  
        {  
            saldoTotal = saldoTotal + iterator.next().getSaldo();  
        }  
      
        return saldoTotal;  
    }  
  
}
ContaAnalitica
** 
* Nas contas contábeis analíticas é que são feitos os lançamentos contábeis que 
* ocorrem no dia a dia de uma entidade. Esta conta não pode possuir sub-contas 
* associadas a ela e o seu saldo é definido como a diferença entre os lançamentos 
* de crédito e de débito. 
* @author Marcelo Magalhães 
* @version 1.0 
* @created 31-jul-2010 01:45:52 
*/  
package modelo;  
  
import java.io.Serializable;  
import java.util.HashSet;  
import java.util.Iterator;  
import java.util.Set;  
  
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.ManyToOne;  
import javax.persistence.SequenceGenerator;  
import javax.persistence.Table;  
import javax.persistence.Transient;  
  
import org.hibernate.annotations.Cascade;  
import org.hibernate.annotations.CascadeType;  
import org.hibernate.annotations.Fetch;  
import org.hibernate.annotations.FetchMode;  
  
@Entity  
@Table(name="ContaContabilAnalitica")  
  
@SequenceGenerator(name="CONTACONTABILANALITICA_SEQ", sequenceName="CONTACONTABILANALITICA_SEQ", allocationSize=1)  
public class ContaContabilAnalitica implements Serializable   
{  
  
    private static final long serialVersionUID = 1;  
    private static final boolean TRUE = true;  
    private static final boolean FALSE = false;  
    private Set<Lancamento> lancamentosDebito;  
    private Set<Lancamento> lancamentosCredito;  
    /** 
     * Identificador da conta analítica. Sequencia gerada pelo banco de dados. 
     */  
    private Long contaContabilAnaliticaID;  
    /** 
     * Identificador da conta contábil sintética (pai) que contém esta conta contábil 
     * analítica. 
     */  
    private ContaContabilSintetica contaContabilSintetica;  
    /** 
     * Nome da conta contábil. Alfanumérico de até 70 caracteres. 
     */  
    private String nome;  
    /** 
     * Campo destinado a observações sobre a conta. 
     */  
    private String observacao;  
  
    /** 
     * Construtor padrão 
     */  
    public ContaContabilAnalitica()  
    {  
        this.lancamentosDebito = new HashSet<Lancamento>();  
        this.lancamentosCredito = new HashSet<Lancamento>();  
    }  
  
    /** 
     * Construtor padrão com argumentos 
     *  
     * @param contaContabilAnaliticaID 
     * @param contaContabilSintetica 
     * @param nome 
     * @param observacao 
     */  
    public ContaContabilAnalitica(Long contaContabilAnaliticaID, ContaContabilSintetica contaContabilSintetica, String nome, String observacao)  
    {  
        this.contaContabilAnaliticaID = contaContabilAnaliticaID;  
        this.contaContabilSintetica = contaContabilSintetica;  
        this.nome = nome;  
        this.observacao = observacao;  
      
        this.lancamentosDebito = new HashSet<Lancamento>();  
        this.lancamentosCredito = new HashSet<Lancamento>();  
    }  
  
    @Id  
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CONTACONTABILANALITICA_SEQ")  
    @Column(name="contaContabilAnaliticaID", unique=TRUE, nullable=TRUE, insertable=TRUE, updatable=TRUE)  
    public Long getContaContabilAnaliticaID()  
    {  
        return this.contaContabilAnaliticaID;  
    }  
  
    @Column(name="nome", unique=FALSE, nullable=FALSE, insertable=TRUE, updatable=TRUE, length=255)  
    public String getNome()  
    {  
        return this.nome;  
    }  
  
    @Column(name="observacao", unique=FALSE, nullable=TRUE, insertable=TRUE, updatable=TRUE, length=255)  
    public String getObservacao()  
    {  
        return this.observacao;  
    }  
  
    @ManyToMany(fetch=FetchType.LAZY)  
    @JoinTable(name="ContaDebitada", joinColumns = {@JoinColumn(name="contaContabilAnaliticaID", nullable=TRUE)}, inverseJoinColumns = {@JoinColumn(name="lancamentoID", nullable=TRUE)})  
    @Fetch(FetchMode.SELECT)  
    @Cascade(CascadeType.DELETE_ORPHAN)  
    public Set<Lancamento> getLancamentosDebito()  
    {  
        return this.lancamentosDebito;  
    }  
  
    @ManyToMany(fetch=FetchType.LAZY)  
    @JoinTable(name="ContaCreditada", joinColumns = {@JoinColumn(name="contaContabilAnaliticaID", nullable=TRUE)}, inverseJoinColumns = {@JoinColumn(name="lancamentoID", nullable=TRUE)})  
    @Fetch(FetchMode.SELECT)  
    @Cascade(CascadeType.DELETE_ORPHAN)  
    public Set<Lancamento> getLancamentosCredito()  
    {  
        return this.lancamentosCredito;  
    }  
  
    @ManyToOne(fetch = FetchType.LAZY)  
    @JoinColumn(name="contaContabilSinteticaID", insertable=TRUE, updatable=TRUE)  
    @Fetch(FetchMode.SELECT)  
    public ContaContabilSintetica getContaContabilSintetica()  
    {  
        return this.contaContabilSintetica;  
    }  
  
    /** 
     *  
     * @param contaContabilAnaliticaID 
     */  
    public void setContaContabilAnaliticaID(Long contaContabilAnaliticaID)  
    {  
        this.contaContabilAnaliticaID = contaContabilAnaliticaID;  
    }  
  
    /** 
     *  
     * @param nome 
     */  
    public void setNome(String nome)  
    {  
        this.nome = nome;  
    }  
  
    /** 
     *  
     * @param observacao 
     */  
    public void setObservacao(String observacao)  
    {  
        this.observacao = observacao;  
    }  
  
    /** 
     *  
     * @param lancamentosDebito 
     */  
    public void setLancamentosDebito(Set<Lancamento> lancamentosDebito)  
    {  
        Iterator<Lancamento> iterator = lancamentosDebito.iterator();  
      
        while (iterator.hasNext())  
        {  
            Lancamento lancamento = (Lancamento)iterator.next();  
            this.adicionarLancamentoDebito(lancamento);  
        }   
    }  
  
    /** 
     *  
     * @param lancamentosCredito 
     */  
    public void setLancamentosCredito(Set<Lancamento> lancamentosCredito)  
    {  
        Iterator<Lancamento> iterator = lancamentosCredito.iterator();  
      
        while (iterator.hasNext())  
        {  
            Lancamento lancamento = (Lancamento)iterator.next();  
            this.adicionarLancamentoCredito(lancamento);  
        }   
    }  
  
    /** 
     *  
     * @param contaContabilSintetica 
     */  
    public void setContaContabilSintetica(ContaContabilSintetica contaContabilSintetica)  
    {  
        this.contaContabilSintetica = contaContabilSintetica;  
    }  
  
    /** 
     *  
     * @param lancamento 
     */  
    @Transient  
    public void adicionarLancamentoDebito(Lancamento lancamento)  
    {  
        if (!this.getLancamentosDebito().contains(lancamento))  
        {  
            this.lancamentosDebito.add(lancamento);  
            lancamento.adicionarContaDebito(this);  
        }  
    }  
  
    /** 
     *  
     * @param lancamento 
     */  
    @Transient  
    public void adicionarLancamentoCredito(Lancamento lancamento)  
    {  
        if (!this.getLancamentosCredito().contains(lancamento))  
        {  
            this.lancamentosCredito.add(lancamento);  
            lancamento.adicionarContaCredito(this);  
        }  
    }  
  
    /** 
     *  
     * @param lancamento 
     */  
    @Transient  
    public void removerLancamentoDebito(Lancamento lancamento)  
    {  
        if (this.getLancamentosDebito().contains(lancamento))  
        {  
            this.lancamentosDebito.remove(lancamento);  
            lancamento.removerContaDebito(this);  
        }  
    }  
  
    /** 
     *  
     * @param lancamento 
     */  
    @Transient  
    public void removerLancamentoCredito(Lancamento lancamento)  
    {  
        if (this.getLancamentosCredito().contains(lancamento))  
        {  
            this.lancamentosCredito.remove(lancamento);  
            lancamento.removerContaCredito(this);  
        }  
    }  
  
    /** 
     *  
     * @param contaContabilSintetica 
     */  
    @Transient  
    public void adicionarContaContabilSintetica(ContaContabilSintetica contaContabilSintetica)  
    {  
        this.contaContabilSintetica = contaContabilSintetica;  
        contaContabilSintetica.adicionarContaContabilAnalitica(this);  
    }  
  
    /** 
     *  
     * @param contaContabilSintetica 
     */  
    @Transient  
    public void removerContaContabilSintetica(ContaContabilSintetica contaContabilSintetica)  
    {  
        if (this.contaContabilSintetica.equals(contaContabilSintetica))  
        {  
            this.contaContabilSintetica = null;  
            contaContabilSintetica.removerContaContabilAnalitica(this);  
        }  
    }  
  
    /** 
     * Saldo total da conta contábil. Nas contas contábeis analíticas é a diferença 
     * entre os lançamento de crédito e os de débito. Já nas contas contábies 
     * sintéticas, o saldo, é o somatório dos saldos das contas contábeis analí ticas 
     * pertencentes a esta conta. 
     */  
    @Transient  
    @Column(name="saldo", unique=FALSE, nullable=FALSE, insertable=TRUE, updatable=TRUE, precision=2)  
    public float getSaldo()  
    {  
        float saldo = 0;  
        //1 - recuperar o vetor de lançamentos de crédito e somar os valores doa lançamentos  
        //2 - recuperar o vetor de lançamentos de débito e somar os valores doa lançamentos  
        //3 - subtrair um resultado do outro (créditos - débitos)  
        return saldo;  
    }  
  
}
Lancamento
/** 
* Os lançamentos contábes são feitos somente nas contas contábeis analíticas e na 
* forma de partidas dobradas, ou seja, para cada lançamento de crédito existe um 
* lançamento de débito correspondente. Na conta onde é feito o lançamento de 
* crédito é chamada de conta de crédito e a conta que recebe o lançamento de 
* débito tem o nome de conta de débito. Pode existir mais de uma conta de crédito 
* e de débito no mesmo lançamento, contudo não podendo ser a mesma para o crédito 
* e para o débito 
* @author Marcelo Magalhães 
* @version 1.0 
* @created 31-jul-2010 01:45:53 
*/  
package modelo;  
  
import java.io.Serializable;  
import java.util.Date;  
import java.util.Calendar;  
import java.util.HashSet;  
import java.util.Set;  
  
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.SequenceGenerator;  
import javax.persistence.Table;  
import javax.persistence.Temporal;  
import javax.persistence.TemporalType;  
import javax.persistence.Transient;  
  
import org.hibernate.annotations.Fetch;  
import org.hibernate.annotations.FetchMode;  
  
@Entity  
@Table(name="Lancamento")  
  
@SequenceGenerator(name="LANCAMENTO_SEQ", sequenceName="LANCAMENTO_SEQ", allocationSize=1)  
public class Lancamento implements Serializable   
{  
  
    private static final long serialVersionUID = 1;  
    private static final boolean TRUE = true;  
    private static final boolean FALSE = false;  
    /** 
     * Identificador da(s) conta(s) de débito do lançamento. 
     */  
    private Set<ContaContabilAnalitica> contasDebito;  
    /** 
     * Identificador da(s) conta(s) de crédito do lançamento. 
     */  
    private Set<ContaContabilAnalitica> contasCredito;  
    /** 
     * Identificador do lançamento. Sequence gerada pelo banco de dados. 
     */  
    private long lancamentoID;  
    /** 
     * Data da cadastro do lançamento. O valor padrão é data corrente. Formato: yyyy- 
     * mm-dd hh:mm:ss 
     */  
    private Calendar dataCadastro;  
    /** 
     * Valor do lançamento 
     */  
    private float valor;  
    /** 
     * Histórico ou descrição do lançamento 
     */  
    private String historico;  
  
    /** 
     * Construtor padrão 
     */  
    public Lancamento()  
    {  
        this.dataCadastro = Calendar.getInstance();  
        dataCadastro.setTime(new Date());  
          
        this.contasDebito = new HashSet<ContaContabilAnalitica>();  
        this.contasCredito = new HashSet<ContaContabilAnalitica>();  
    }  
  
    /** 
     * Construtor padrão com argumentos 
     *  
     * @param lancamentoID 
     * @param valor 
     * @param historico 
     * @param contasDebito 
     * @param contasCredito 
     */  
    public Lancamento(long lancamentoID, float valor, String historico, Set<ContaContabilAnalitica> contasDebito, Set<ContaContabilAnalitica> contasCredito)  
    {  
        this.lancamentoID = lancamentoID;  
        this.valor = valor;  
        this.historico = historico;  
        this.contasDebito = contasDebito;  
        this.contasCredito = contasCredito;  
          
        this.dataCadastro = Calendar.getInstance();  
        dataCadastro.setTime(new Date());  
    }  
  
    @Id  
    @Column(name="lancamentoID", unique=TRUE, nullable=TRUE, insertable=TRUE, updatable=TRUE)  
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="LANCAMENTO_SEQ")  
    public long getLancamentoID()  
    {  
        return this.lancamentoID;  
    }  
  
    @Temporal(TemporalType.TIMESTAMP)  
    @Column(name="dataCadastro", unique=FALSE, nullable=FALSE, insertable=TRUE, updatable=TRUE)  
    public Calendar getDataCadastro()  
    {  
        return this.dataCadastro;  
    }  
  
    @Column(name="valor", unique=FALSE, nullable=FALSE, insertable=TRUE, updatable=TRUE, length=255, precision=2)  
    public float getValor()  
    {  
        return this.valor;  
    }  
  
    @Column(name="historico", unique=FALSE, nullable=FALSE, insertable=TRUE, updatable=TRUE, length=255)  
    public String getHistorico()  
    {  
        return this.historico;  
    }  
  
    @ManyToMany(fetch=FetchType.LAZY)  
    @JoinTable(name="ContaDebitada", joinColumns = {@JoinColumn(name="lancamentoID")},inverseJoinColumns = {@JoinColumn(name="contaContabilAnaliticaID")})  
    @Fetch(FetchMode.SELECT)  
    public Set<ContaContabilAnalitica> getContasDebito()  
    {  
        return this.contasDebito;  
    }  
  
    @ManyToMany(fetch=FetchType.LAZY)  
    @JoinTable(name="ContaCreditada", joinColumns = {@JoinColumn(name="lancamentoID")},inverseJoinColumns = {@JoinColumn(name="contaContabilAnaliticaID")})  
    @Fetch(FetchMode.SELECT)  
    public Set<ContaContabilAnalitica> getContasCredito()  
    {  
        return this.contasCredito;  
    }  
  
    /** 
     *  
     * @param lancamentoID 
     */  
    public void setLancamentoID(long lancamentoID)  
    {  
        this.lancamentoID = lancamentoID;  
    }  
  
    public void setDataCadastro(Calendar data)  
    {         
        this.dataCadastro = data;  
    }  
  
    /** 
     *  
     * @param valor 
     */  
    public void setValor(float valor)  
    {  
        this.valor = valor;  
    }  
  
    /** 
     *  
     * @param historico 
     */  
    public void setHistorico(String historico)  
    {  
        this.historico = historico;  
    }  
  
    /** 
     *  
     * @param contasDebito 
     */  
    public void setContasDebito(Set<ContaContabilAnalitica> contasDebito)  
    {  
        this.contasDebito = contasDebito;  
    }  
  
    /** 
     *  
     * @param contasCredito 
     */  
    public void setContasCredito(Set<ContaContabilAnalitica> contasCredito)  
    {  
        this.contasCredito = contasCredito;  
    }  
  
    /** 
     *  
     * @param contaDebito 
     */  
    @Transient  
    public void adicionarContaDebito(ContaContabilAnalitica contaDebito)  
    {  
        if (!this.getContasDebito().contains(contaDebito))  
        {  
            this.contasDebito.add(contaDebito);  
            contaDebito.adicionarLancamentoDebito(this);  
        }  
    }  
  
    /** 
     *  
     * @param contaCredito 
     */  
    @Transient  
    public void adicionarContaCredito(ContaContabilAnalitica contaCredito)  
    {  
        if (!this.getContasCredito().contains(contaCredito))  
        {  
            this.contasCredito.add(contaCredito);  
            contaCredito.adicionarLancamentoCredito(this);  
        }  
    }  
  
    /** 
     *  
     * @param contaDebito 
     */  
    @Transient  
    public void removerContaDebito(ContaContabilAnalitica contaDebito)  
    {  
        if (!this.getContasDebito().contains(contaDebito))  
        {  
            this.contasDebito.remove(contaDebito);  
            contaDebito.removerLancamentoDebito(this);  
        }   
    }  
  
    /** 
     *  
     * @param contaCredito 
     */  
    @Transient  
    public void removerContaCredito(ContaContabilAnalitica contaCredito)  
    {  
        if (!this.getContasCredito().contains(contaCredito))  
        {  
            this.contasCredito.remove(contaCredito);  
            contaCredito.removerLancamentoCredito(this);  
        }   
    }  
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...