Gente estou com uma duvida
Tenho a minha classe de modelo que possui uma chave primaria com varios campos e por isso criei um compositeId para o meu modelo. No banco a minha chave primaria tem 4 campos e 1 deles é sequencial.
No modelo ficou assim(nao coloquei o modelo todo nao, so o getter do id):
E no composite id coloquei (nao pus os setters aqui para nao poluir mt.):
/** Número Seqüencial do bloco. */privateIntegernumeroSequencialGrupoBloco;/** Lf Empresa Matriz. */privateIEmpresaMatrizempresaMatriz;/** Indica o tipo de layout do arquivo 0-SPED-ECD/1-SPED-FCONT. */privateStringtipoLayout;/** Tipo de Registro. */privateStringtipoRegistro;@GeneratedValue(generator="S_SEQ_ARQ_SPED_01")@SequenceGenerator(name="S_SEQ_ARQ_SPED_01",sequenceName="S_SEQ_ARQ_SPED_01")@Column(name="NUM_SEQ_GRUPO_BLOCO")publicIntegergetNumeroSequencialGrupoBloco(){returnnumeroSequencialGrupoBloco;}@ManyToOne(targetEntity=br.com.souzacruz.sped.contabil.service.impl.model.EmpresaMatriz.class)@JoinColumns({@JoinColumn(name="COD_HOLD",referencedColumnName="COD_HOLDING"),@JoinColumn(name="COD_MATRIZ",referencedColumnName="COD_MATRIZ")})publicIEmpresaMatrizgetEmpresaMatriz(){returnempresaMatriz;}@Column(name="TIP_LAYOUT")publicStringgetTipoLayout(){returntipoLayout;}@Column(name="TIP_REGTRO")publicStringgetTipoRegistro(){returntipoRegistro;
Porém qndo vou salvar o hibernate me retorna o erro:
java.sql.SQLException: ORA-01400: não é possível inserir NULL em (“FINSPED”.“SEQ_ARQ_SPED”.“NUM_SEQ_GRUPO_BLOCO”)
Sendo que esse campo ele nao deveria por default na query e ir adicionando 1 unidade conforme eu salvo no banco?
vlw
e só uma dica: no @SequenceGenerator especifique o atributo allocationSize=1 porque há frameworks que o padrão não é 1 como, por exemplo, o hibernate que aloca de 50 em 50…
X
xedrinho
Cara nao funcionou…
e eu nao entendi esse allocationSize=1 , e que 50 em 50 é esse que o hibernate poe??
vlw
Quero dizer colocar mais esse atributo porque senão a sequence será incrementada de 50 em 50 e não de 1 em 1.
Agora com relação ao EmbeddedId parece que tem alguma coisa errada. Na classe que era pra ser a chave composta há relação entre entidades… posta as duas classes inteiras pra gente ver o que vc arrumou aí…
X
xedrinho
packagebr.com.souzacruz.sped.contabil.service.impl.model;importjavax.persistence.Basic;importjavax.persistence.Column;importjavax.persistence.EmbeddedId;importjavax.persistence.Entity;importjavax.persistence.Table;importjavax.persistence.Transient;importbr.com.souzacruz.sped.contabil.IEditableSequencialArquivoSped;importbr.com.souzacruz.sped.contabil.service.impl.model.compositeId.SequencialArquivoSpedPK;/** * Classe de modelo de Sequencial Arquivo Sped. * @author Cortez */@Entity@Table(name="SEQ_ARQ_SPED")publicclassSequencialArquivoSpedimplementsIEditableSequencialArquivoSped{/** CONSTANTE. */privatestaticfinalintTAM_30=50;/** Variavel de serial. */privatestaticfinallongserialVersionUID=1L;/** Constante. */privatestaticfinalintTAM_2000=2000;/** Chave primária da tabela. */privateSequencialArquivoSpedPKid;/** Bloco (assunto a ser tratado). */privateStringbloco;/** Descrição do bloco. */privateStringdescricao;/** Flag de utilização Matriz Sap. */privateStringflagUtilizacao;/** Flag de Geração do bloco. */privateStringflagGeracao;/** Flag de Geração Sazonal do Bloco. */privateStringflagGeracaoSazonal;/** Lista de arquivos sped. */// private List<IArquivoSped> arquivosSped;/** Pega os primeiros 50 caracteres da descrição. */privateStringresumoDescricao;@EmbeddedIdpublicSequencialArquivoSpedPKgetId(){returnthis.id;}@Column(name="IND_BLOCO",length=1)publicStringgetBloco(){returnbloco;}@Column(name="DSC_LINHA",length=TAM_2000)publicStringgetDescricao(){returndescricao;}@Basic@Column(name="FLG_UTLZCO",length=1)publicStringgetFlagUtilizacao(){returnflagUtilizacao;}@Column(name="FLG_GERCAO",length=1)publicStringgetFlagGeracao(){returnflagGeracao;}@Column(name="FLG_GERCAO_SAZON",length=1)publicStringgetFlagGeracaoSazonal(){returnflagGeracaoSazonal;}// @OneToMany(mappedBy = "id.sequencialArquivoSped",// targetEntity = br.com.souzacruz.sped.contabil.service.impl.model.ArquivoSped.class)// public List<IArquivoSped> getArquivosSped() {// return this.arquivosSped;// }/** * getter de resumo Descricao que pega os primeiros 50 caracteres da descrição. * @return string */@TransientpublicfinalStringgetResumoDescricao(){if(this.descricao.length()>TAM_30){this.resumoDescricao=this.descricao.substring(0,TAM_30);}else{this.resumoDescricao=this.descricao;}returnresumoDescricao;}publicvoidsetId(finalSequencialArquivoSpedPKseqArqSpedPK){this.id=seqArqSpedPK;}publicvoidsetBloco(finalStringindBloco){this.bloco=indBloco;}publicvoidsetDescricao(finalStringdscLinha){this.descricao=dscLinha;}publicvoidsetFlagUtilizacao(finalStringflgUtlzco){this.flagUtilizacao=flgUtlzco;}publicvoidsetFlagGeracao(finalStringflgGercao){this.flagGeracao=flgGercao;}publicvoidsetFlagGeracaoSazonal(finalStringflgGercaoSazon){this.flagGeracaoSazonal=flgGercaoSazon;}// public void setArquivosSped(final List<IArquivoSped> arqSpeds) {// this.arquivosSped = arqSpeds;// }publicfinalvoidsetResumoDescricao(finalStringresumoDescricao){this.resumoDescricao=resumoDescricao;}}
packagebr.com.souzacruz.sped.contabil.service.impl.model.compositeId;importjava.io.Serializable;importjavax.persistence.Column;importjavax.persistence.Embeddable;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.JoinColumn;importjavax.persistence.JoinColumns;importjavax.persistence.ManyToOne;importjavax.persistence.SequenceGenerator;importbr.com.souzacruz.sped.contabil.IEmpresaMatriz;/** * Composite Id de SequencialArquivoSped pk. * * @author Cortez */@EmbeddablepublicclassSequencialArquivoSpedPKimplementsSerializable{/** Variavel de serial. */privatestaticfinallongserialVersionUID=1L;/** Número Seqüencial do bloco. */privateIntegernumeroSequencialGrupoBloco;/** Lf Empresa Matriz. */privateIEmpresaMatrizempresaMatriz;/** Indica o tipo de layout do arquivo 0-SPED-ECD/1-SPED-FCONT. */privateStringtipoLayout;/** Tipo de Registro. */privateStringtipoRegistro;@GeneratedValue(generator="S_SEQ_ARQ_SPED_01",strategy=GenerationType.SEQUENCE)@SequenceGenerator(name="S_SEQ_ARQ_SPED_01",sequenceName="S_SEQ_ARQ_SPED_01",allocationSize=1)@Column(name="NUM_SEQ_GRUPO_BLOCO")publicIntegergetNumeroSequencialGrupoBloco(){returnnumeroSequencialGrupoBloco;}@ManyToOne(targetEntity=br.com.souzacruz.sped.contabil.service.impl.model.EmpresaMatriz.class)@JoinColumns({@JoinColumn(name="COD_HOLD",referencedColumnName="COD_HOLDING"),@JoinColumn(name="COD_MATRIZ",referencedColumnName="COD_MATRIZ")})publicIEmpresaMatrizgetEmpresaMatriz(){returnempresaMatriz;}@Column(name="TIP_LAYOUT")publicStringgetTipoLayout(){returntipoLayout;}@Column(name="TIP_REGTRO")publicStringgetTipoRegistro(){returntipoRegistro;}publicvoidsetNumeroSequencialGrupoBloco(finalIntegernumSeqialGrupoBloco){this.numeroSequencialGrupoBloco=numSeqialGrupoBloco;}publicvoidsetEmpresaMatriz(finalIEmpresaMatrizlfEmpresaMatriz){this.empresaMatriz=lfEmpresaMatriz;}publicvoidsetTipoLayout(finalStringtipLayout){this.tipoLayout=tipLayout;}publicvoidsetTipoRegistro(finalStringtipRegtro){this.tipoRegistro=tipRegtro;}}
ralphsilver
Olha… eu olhando eu não vejo nenhum problema… exceto a relação que há na chave composta… se não me engano… vc não pode por relação nela… pega esse atributo e joga na entidade e testa…
G
garcia-jj
Na verdade o padrão é 50 para qualquer framework. Isso está na spec do JPA.