Pessoal estou com dúvida em relação a exclusão de uma entity. Ela possui relacionamento (fk) com outras tabelas.
As classes estão anotadas assim:
@Entity
@TableGenerator(name = "Tabela_IDs", pkColumnName = "tabela", pkColumnValue = "idpedido", valueColumnName = "id_atual", allocationSize = 1)
@NamedQueries({
@NamedQuery(name = "Pedido.consultarTodos", query = "SELECT c FROM Pedido c ORDER BY c.dataped DESC")
})
public class Pedido implements Serializable {
///demais atributos classe foram desconsiderados
@OneToMany(cascade = CascadeType.REMOVE)
@JoinColumn(name = "pedido")
@ForeignKey(name = "fk_pedido_item")
private List<ItemPedido> itens;
//get e set omitidos
}
Trata-se de um relacionamento unidirecional (na entity ItemPedido não tenho nenhuma anotação). Minha intenção é sendo um PEDIDO composto de vários itens, ao ser excluído um PEDIDO todos os seus itens fossem automaticamente excluídos junto com ele.
O problema é que em outras entity’s ficaram assim:
@Entity
@TableGenerator(name = "Tabela_IDs", pkColumnName = "tabela", pkColumnValue = "idcaixa", valueColumnName = "id_atual", allocationSize = 1)
@NamedQueries({
@NamedQuery(name = "Caixa.consultarTodos", query = "SELECT c FROM CaixaDespesa c ORDER BY c.pedido.dataped")
})
public class CaixaDespesa implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "Tabela_IDs")
private int idcaixa;
@Column(columnDefinition = "VARCHAR(255) character set WIN1252 collate WIN_PTBR")
private String historico; // pago ou em aberto
@OneToOne
@JoinColumn(name = "pedido")
@ForeignKey(name = "fk_cx_desp_pedido")
private Pedido pedido;
}
Portanto, na entity CAIXADESPESA tenho uma chave estrageira que aponta para PEDIDO.
Então ao tentar exclur um pedido, a JPA está reclamando desse último relacionamento, vejam:
ERROR: GDS Exception. 335544466. violation of FOREIGN KEY constraint "FK_CX_DESP_PEDIDO" on table "CAIXADESPESA"
Foreign key references are present for the record
Problematic key value is ("IDPEDIDO" = 16)
Gostaria de manter os relacionamento sendo unidirecionais.
Objetivo: sempre que gravo um pedido (na mesma transação lógico), gero uma movimentação no caixa. Esta movimentação tem um pedido que será tratado posteriormente com uma stored procedure (estou utilizando o firebird 2.5).
Ao que me parece não será possível fazer essa exclusão da forma, gostaria que os colegas dessem alguma opinião a respeito.
Desde já agradeço aos colegas pelas sugestões e auxílio!