Olá boa noite venho por meio deste mais uma vez pedir auxilio aos Srs. dessa vez fiquei presso em um relacionamento unidirecional, estou conseguindo salvar normal mas na hora de trazer ele traz um persistencebag então segue o cenário:
Classe Pedido tem varias Contas - Esse relacionamento é Unidirecinoal, ou seja, Contas não se relaciona com pedido, levando isso em conta
Classe Pedido
@Entity
@Table(name="pedido", schema="public")
public class Pedido {
@Id
@SequenceGenerator(name="generator_pedido", sequenceName="gen_pedido")
@GeneratedValue(generator="generator_pedido")
@Column(name="pedi_id", nullable=false)
private int pedi_id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="pess_id", updatable=true, insertable=true)
@Fetch(FetchMode.JOIN)
private Pessoa pessoa;
@Column(name="pedi_tipo", length=50, nullable=false)
private int pedi_tipo;
@OneToMany(mappedBy="pedido")
@Cascade(CascadeType.ALL)
private List<ItemPedido> itempedido;
@Column(name="pedi_dtemissao", nullable=false)
@Temporal(TemporalType.DATE)
private Date pedi_dtemissao;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="usua_id", updatable=true, insertable=true)
@Fetch(FetchMode.JOIN)
private Usuario usuario;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="empe_id", updatable=true, insertable=true)
@Fetch(FetchMode.JOIN)
private Empresa empresa;
@OneToMany()
@Cascade(value={CascadeType.ALL})
@JoinTable(name = "pedido_conta", joinColumns = @JoinColumn(name = "pedi_id"), inverseJoinColumns = @JoinColumn(name = "cota_id"))
private List<Conta> conta;
@OneToMany(mappedBy="pedido")
@Cascade(CascadeType.ALL)
private List<Pedido_conta> pedido_conta;
Classe Conta
@Entity
@Table(name="conta", schema="public")
public class Conta {
@Id
@SequenceGenerator(name="generator_conta", sequenceName="gen_conta")
@GeneratedValue(generator="generator_conta")
@Column(name="cota_id", nullable=false)
private int cota_id;
@Column(name="cota_tipo", length=1, nullable=false)
private int cota_tipo;
@Column(name="cota_dtlancamento", nullable=false)
@Temporal(TemporalType.DATE)
private Date cota_dtlancamento;
@Column(name="cota_dtvencimento", nullable=false)
@Temporal(TemporalType.DATE)
private Date cota_dtvencimento;
@Column(name="cota_valor", precision=2, nullable=false)
private Double cota_valor;
@Column(name="cota_status", length=1, nullable=false)
private int cota_status;
@OneToMany(mappedBy="conta")
@Cascade(CascadeType.ALL)
private List<ContaAnotacao> contaanotacao;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="coca_id", updatable=true, insertable=true)
@Fetch(FetchMode.JOIN)
private ContaCaixa contacaixa;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="pess_id", updatable=true, insertable=true)
@Fetch(FetchMode.JOIN)
private Pessoa pessoa;
@Column(name="cota_descricao", length=200, nullable=true)
private String cota_descricao;
@Column(name="cota_parcela", length=15, nullable=false)
private String cota_parcela;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="usua_id", updatable=true, insertable=true)
@Fetch(FetchMode.JOIN)
private Usuario usuario;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="empe_id", updatable=true, insertable=true)
@Fetch(FetchMode.JOIN)
private Empresa empresa;
@Entity
@Table(name="pedido_conta", schema="public")
public class Pedido_conta implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="pedi_id", updatable=true, insertable=true)
@Fetch(FetchMode.JOIN)
private Pedido pedido;
@Id
@OneToOne()
private Conta conta;
Bom a minha duvida é a seguinte, quando eu faço alguma alteração no pedido eu preciso deletar todas as contas, mas contas não tem relação com pedido então preciso recuperar todas as contas para poder envialas a deleção na classe de persistencia de conta, para isso resolvi mapear a tabela pedido_conta a classe Pedido_conta no intuito de obter todas as contas de 1 pedido, ok… quando eu procuro pelo pedido ele vem com o atributo pedido_conta como persistencebag e quando eu clico pra ver se ele vai conseguir obter os itens é gerado o seguinte erro “ERRO: coluna pedido_con0_.conta_cota_id não existe” a ideia é criar o controlador de pedido_conta e passar um pedido para ele retornar uma listagem de conta sendo assim vou conseguir ter o total controle das contas geradas pelo pedido.
PS1: Gets and Seters foram omitidos.
PS2: Não estou utilizando o filter do hibernate para manter a sessão aberta, estou implementando tudo na mão mesmo afim de performance
PS3: Não é uma sugestão válida colocar o fatch para eager preciso mesmo
Estive dando uma analisada enquanto postava aqui, e vi essa 3º constraint fruto do relacionamento unidirecional, tentei o seguinte:
1º Remover o relacionamento de Pedido com PedidoConta e deixar como se fosse uma classe normal
2º Remover essa 3º constraint na mão no banco pra ver se o tal erro desaparecia e eu conseguia obter a listagem de pedidos e de contas com a classe PedidoConta
Ambos não resolveram, segue abaixo o script do postgres da tabela gerada automaticamente.
CREATE TABLE pedidoconta
(
pedi_id integer NOT NULL,
cota_id integer NOT NULL,
CONSTRAINT fk781ee34a9c190dbf FOREIGN KEY (cota_id)
REFERENCES conta (cota_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk781ee34aec0de856 FOREIGN KEY (pedi_id)
REFERENCES pedido (pedi_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT pedidoconta_cota_id_key UNIQUE (cota_id)
)
Nâo sei mais o que fazer.
Fico no aguardo.