Lucas_Camara 14 de fev. de 2019
Como é a estratégia de obter id da classe ArquivoImagemEntity?
guilhermebhte 14 de fev. de 2019
Gerado automaticamente pelo banco de dados, um GUID
Lucas_Camara 14 de fev. de 2019
Pelo erro, você deve está tentando salvar um valor valor inválido em uma coluna not null (provavelmente um valor nulo).
guilhermebhte 14 de fev. de 2019
Nesta classe: ContaPagarReceberArquivoImagemEntity ?
darlan_machado 14 de fev. de 2019
Não, o erro se refere ao fato de:
Ele estár inserindo um objeto em que ao menos um atributo é um objeto e esse objeto ainda não foi persistido
Ele estar atualizando um objeto que tenha uma lista e ao menos um elemento desta lista é novo.
Ele estar adicionando um objeto que tenha uma lista e esta lista possui elementos não salvos.
Ou seja. ele precisa salvar todos os atributos do objeto ou, no caso de coleção, os elementos da coleção.
Provavelmente, o mapeamento que ele está usando não contém a propriedade CASCADE.
Lucas_Camara 14 de fev. de 2019
O pior eh que tem um cascade. Bom, talvez esteja configurado errado.
darlan_machado 14 de fev. de 2019
@OneToMany (mappedBy = “contaPagarReceber”, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH}) public Set<ContaPagarReceberArquivoImagemEntity> getContasPagarReceberArquivosImagens() {
08:26:42,120 ERROR [br.eti.netsoft.dao.GHDAO] (default task-16) Erro ao gravar objeto: br.eti.netsoft.dao.exception.RuntimeExceptionDao: java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved before current operation : br.eti.netsoft.erp.modelo.financeiro.ContaPagarReceberArquivoImagemEntity.arquivoImagem -> br.eti.netsoft.erp.modelo.arquivoimagem.ArquivoImagemEntity
Parece que o erro se refere a outro atributo da classe em questão.
Lucas_Camara 14 de fev. de 2019
Como teste, coloque um Cascade.ALL, pra ver o que acontece. =)
guilhermebhte 14 de fev. de 2019
Estou inserindo um objeto que tem uma lista de outros objetos, com , cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH})
guilhermebhte 14 de fev. de 2019
guilhermebhte 14 de fev. de 2019
Vou analisar e vejo se a algum campo que está null
darlan_machado 15 de fev. de 2019
Com apenas estes trechos do código fica difícil ter uma visão maior.
Ainda mais que o erro se refere a um atributo cujo getter deveria ser
O que é diferente do que você apresentou aí, não é mesmo?
getContasPagarReceberArquivosImagens () {
guilhermebhte 15 de fev. de 2019
Isto é uma lista de imagens para uma contas
darlan_machado 15 de fev. de 2019
Cara, posta a classe ContaPagarReceberArquivoImagemEntity completa
guilhermebhte 15 de fev. de 2019
package br . eti . netsoft . erp . modelo . financeiro ;
import javax.persistence.Column ;
import javax.persistence.Entity ;
import javax.persistence.GeneratedValue ;
import javax.persistence.Id ;
import javax.persistence.Index ;
import javax.persistence.JoinColumn ;
import javax.persistence.ManyToOne ;
import javax.persistence.Table ;
import org.hibernate.annotations.GenericGenerator ;
import org.hibernate.envers.AuditOverride ;
import org.hibernate.envers.Audited ;
import org.hibernate.envers.RelationTargetAuditMode ;
import br.eti.netsoft.erp.modelo.ErpEntity ;
import br.eti.netsoft.erp.modelo.arquivoimagem.ArquivoImagemEntity ;
import br.eti.netsoft.modelo.auditoria.AuditableBaseEntity ;
import br.eti.netsoft.util.anotacao.ExclusaoLogica ;
/**
* @description Modelo para arquivos ou imagems para a contas pagar ou receber
* @author GH SISTEMAS
*/
@Entity
@Table ( name = "TB_CON_PAG_REC_IMG_ARQ" , schema = "FINANCEIROS" , indexes = {
@Index ( columnList = "ST_REGISTRO" , name = "I1_CON_PAG_REC_IMG_ARQ" ),
@Index ( columnList = "FK_CONTA_PAGAR_RECEBER" , name = "I2_CON_PAG_REC_IMG_ARQ" ),
@Index ( columnList = "FK_ARQUIVO_IMAGEM" , name = "I3_CON_PAG_REC_IMG_ARQ" )})
@Audited
@AuditOverride ( forClass = AuditableBaseEntity . class )
@ExclusaoLogica
public class ContaPagarReceberArquivoImagemEntity extends ErpEntity {
private static final long serialVersionUID = - 7273641592040911533 L ;
private ContaPagarReceberEntity contaPagarReceber ;
private ArquivoImagemEntity arquivoImagem ;
@Id
@Override
@Column ( name = "PK_CON_PAG_REC_IMG_ARQ" )
@GeneratedValue ( generator = "system-uuid" )
@GenericGenerator ( name = "system-uuid" , strategy = "uuid2" )
public String getId () {
return super . getId ();
}
@Audited ( targetAuditMode = RelationTargetAuditMode . NOT_AUDITED )
@ManyToOne ( targetEntity = ContaPagarReceberEntity . class )
@JoinColumn ( name = "FK_CONTA_PAGAR_RECEBER" , nullable = false )
public ContaPagarReceberEntity getContaPagarReceber () {
return contaPagarReceber ;
}
public void setContaPagarReceber ( ContaPagarReceberEntity contaPagarReceber ) {
this . contaPagarReceber = contaPagarReceber ;
}
@Audited ( targetAuditMode = RelationTargetAuditMode . NOT_AUDITED )
@ManyToOne ( targetEntity = ArquivoImagemEntity . class )
@JoinColumn ( name = "FK_ARQUIVO_IMAGEM" , nullable = false )
public ArquivoImagemEntity getArquivoImagem () {
return arquivoImagem ;
}
public void setArquivoImagem ( ArquivoImagemEntity arquivoImagem ) {
this . arquivoImagem = arquivoImagem ;
}
}
package br . eti . netsoft . erp . modelo . financeiro ;
import javax.persistence.Column ;
import javax.persistence.Entity ;
import javax.persistence.GeneratedValue ;
import javax.persistence.Id ;
import javax.persistence.Index ;
import javax.persistence.JoinColumn ;
import javax.persistence.ManyToOne ;
import javax.persistence.Table ;
import org.hibernate.annotations.GenericGenerator ;
import org.hibernate.envers.AuditOverride ;
import org.hibernate.envers.Audited ;
import org.hibernate.envers.RelationTargetAuditMode ;
import br.eti.netsoft.erp.modelo.ErpEntity ;
import br.eti.netsoft.erp.modelo.arquivoimagem.ArquivoImagemEntity ;
import br.eti.netsoft.modelo.auditoria.AuditableBaseEntity ;
import br.eti.netsoft.util.anotacao.ExclusaoLogica ;
/**
* @description Modelo para arquivos ou imagems para a contas pagar ou receber
* @author GH SISTEMAS
*/
@Entity
@Table ( name = "TB_CON_PAG_REC_IMG_ARQ" , schema = "FINANCEIROS" , indexes = {
@Index ( columnList = "ST_REGISTRO" , name = "I1_CON_PAG_REC_IMG_ARQ" ),
@Index ( columnList = "FK_CONTA_PAGAR_RECEBER" , name = "I2_CON_PAG_REC_IMG_ARQ" ),
@Index ( columnList = "FK_ARQUIVO_IMAGEM" , name = "I3_CON_PAG_REC_IMG_ARQ" )})
@Audited
@AuditOverride ( forClass = AuditableBaseEntity . class )
@ExclusaoLogica
public class ContaPagarReceberArquivoImagemEntity extends ErpEntity {
private static final long serialVersionUID = - 7273641592040911533 L ;
private ContaPagarReceberEntity contaPagarReceber ;
private ArquivoImagemEntity arquivoImagem ;
@Id
@Override
@Column ( name = "PK_CON_PAG_REC_IMG_ARQ" )
@GeneratedValue ( generator = "system-uuid" )
@GenericGenerator ( name = "system-uuid" , strategy = "uuid2" )
public String getId () {
return super . getId ();
}
@Audited ( targetAuditMode = RelationTargetAuditMode . NOT_AUDITED )
@ManyToOne ( targetEntity = ContaPagarReceberEntity . class )
@JoinColumn ( name = "FK_CONTA_PAGAR_RECEBER" , nullable = false )
public ContaPagarReceberEntity getContaPagarReceber () {
return contaPagarReceber ;
}
public void setContaPagarReceber ( ContaPagarReceberEntity contaPagarReceber ) {
this . contaPagarReceber = contaPagarReceber ;
}
@Audited ( targetAuditMode = RelationTargetAuditMode . NOT_AUDITED )
@ManyToOne ( targetEntity = ArquivoImagemEntity . class )
@JoinColumn ( name = "FK_ARQUIVO_IMAGEM" , nullable = false )
public ArquivoImagemEntity getArquivoImagem () {
return arquivoImagem ;
}
public void setArquivoImagem ( ArquivoImagemEntity arquivoImagem ) {
this . arquivoImagem = arquivoImagem ;
}
}
package br . eti . netsoft . erp . modelo . financeiro ;
import javax.persistence.Column ;
import javax.persistence.Entity ;
import javax.persistence.GeneratedValue ;
import javax.persistence.Id ;
import javax.persistence.Index ;
import javax.persistence.JoinColumn ;
import javax.persistence.ManyToOne ;
import javax.persistence.Table ;
import org.hibernate.annotations.GenericGenerator ;
import org.hibernate.envers.AuditOverride ;
import org.hibernate.envers.Audited ;
import org.hibernate.envers.RelationTargetAuditMode ;
import br.eti.netsoft.erp.modelo.ErpEntity ;
import br.eti.netsoft.erp.modelo.arquivoimagem.ArquivoImagemEntity ;
import br.eti.netsoft.modelo.auditoria.AuditableBaseEntity ;
import br.eti.netsoft.util.anotacao.ExclusaoLogica ;
/**
* @description Modelo para arquivos ou imagems para a contas pagar ou receber
* @author GH SISTEMAS
*/
@Entity
@Table ( name = "TB_CON_PAG_REC_IMG_ARQ" , schema = "FINANCEIROS" , indexes = {
@Index ( columnList = "ST_REGISTRO" , name = "I1_CON_PAG_REC_IMG_ARQ" ),
@Index ( columnList = "FK_CONTA_PAGAR_RECEBER" , name = "I2_CON_PAG_REC_IMG_ARQ" ),
@Index ( columnList = "FK_ARQUIVO_IMAGEM" , name = "I3_CON_PAG_REC_IMG_ARQ" )})
@Audited
@AuditOverride ( forClass = AuditableBaseEntity . class )
@ExclusaoLogica
public class ContaPagarReceberArquivoImagemEntity extends ErpEntity {
private static final long serialVersionUID = - 7273641592040911533 L ;
private ContaPagarReceberEntity contaPagarReceber ;
private ArquivoImagemEntity arquivoImagem ;
@Id
@Override
@Column ( name = "PK_CON_PAG_REC_IMG_ARQ" )
@GeneratedValue ( generator = "system-uuid" )
@GenericGenerator ( name = "system-uuid" , strategy = "uuid2" )
public String getId () {
return super . getId ();
}
@Audited ( targetAuditMode = RelationTargetAuditMode . NOT_AUDITED )
@ManyToOne ( targetEntity = ContaPagarReceberEntity . class )
@JoinColumn ( name = "FK_CONTA_PAGAR_RECEBER" , nullable = false )
public ContaPagarReceberEntity getContaPagarReceber () {
return contaPagarReceber ;
}
public void setContaPagarReceber ( ContaPagarReceberEntity contaPagarReceber ) {
this . contaPagarReceber = contaPagarReceber ;
}
@Audited ( targetAuditMode = RelationTargetAuditMode . NOT_AUDITED )
@ManyToOne ( targetEntity = ArquivoImagemEntity . class )
@JoinColumn ( name = "FK_ARQUIVO_IMAGEM" , nullable = false )
public ArquivoImagemEntity getArquivoImagem () {
return arquivoImagem ;
}
public void setArquivoImagem ( ArquivoImagemEntity arquivoImagem ) {
this . arquivoImagem = arquivoImagem ;
}
}
Solucao aceita
darlan_machado 15 de fev. de 2019 2 likes
@Audited ( targetAuditMode = RelationTargetAuditMode . NOT_AUDITED )
@ManyToOne ( targetEntity = ArquivoImagemEntity . class )
@JoinColumn ( name = "FK_ARQUIVO_IMAGEM" , nullable = false ) public ArquivoImagemEntity
getArquivoImagem () { return arquivoImagem ; }
Aqui você não tem o cascade.
P.S.: Não gosto de usar anotações nos getters, fico perdido vendo esse código amontoado.
guilhermebhte 15 de fev. de 2019
É mesmo. Acho que o problema é este, correto ?
Vou testar e informo aqui.