Ir para conteúdo
Fórum Script Brasil

Marcelo V. V. Magalhães

Membros
  • Total de itens

    4
  • Registro em

  • Última visita

Sobre Marcelo V. V. Magalhães

  • Data de Nascimento 26/02/1976

Contatos

  • Website URL
    http://
  • ICQ
    0

Perfil

  • Gender
    Male
  • Location
    Rio de Janeiro

Marcelo V. V. Magalhães's Achievements

0

Reputação

  1. 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); } } }
  2. Caro amigos, Estou com uma necessidade de criar uma PK (sequence normal) em uma tabela já existente no MySQL 5. A minha dúvida é se eu criar uma nova coluna e configurá-la para ser uma PK da tabela o que ocorre com os registros já existente nesta tabela. O MySQL irá numerá-los automaticamente, ou só quando eu inserir novos registros? Hoje esta tabela usa uma "soma" de diversas colunas para ser a PK, o problema é que no update tenho que informar o set destes novos campos e a PK para "achar" o registro, isso está gerando um problema no código, pois ou tenho que passar dois objeto, o antigo e o novo, ou criar duplicatas dos campos que são PK no objeto. Por exemplo a data faz parte da PK e pode ser atualizada sendo assim o objeto teria data_antiga e data_nova ou passar dois objeto um sendo antigo e outro o novo. Abraços a todos. Marcelo Magalhães - R.J.
  3. Caros colegas, Tenho um form com diversos campos, radio box, etc... Quero fazer o seguinte, quando seleciono um quantidade de campos específicas alguns radio box fiquem desabilitados (cinza claro). Já consegui fazer eles serem desabilitados (não alterar nada quando eu clico em algum deles), contudo quero deixar alguns radio box travados (cinza claro). Como fazer isso? Utilizado JavaScript. Abraços.
×
×
  • Criar Novo...