Olá tudo certo?!!
Estou desenvolvendo uma aplicação com hibernate annotations que apresenta relacionameto n:m com chave composta.
O esquema do banco é esse: tabela nfentrada, tabela produto e tabela itens_nf_entrada que é a resultante do relacionamento n:m entre nfentrada e produtos.
create table Produtos (
cod_produto integer DEFAULT nextval(‘cod_produto_seq’),
cod_categoria integer not null,
cod_sub_categoria integer not null,
cod_marca integer not null,
descricao varchar(100) not null,
unidade varchar(50) not null,
qtdade_min real not null,
preco_custo real not null,
preco_venda real not null,
data_ultima_saida date not null,
data_ultima_entrada date not null,
percentual_venda real not null,
constraint pk_produto primary key (cod_produto),
constraint fk1_categoria foreign key (cod_categoria) references Categoria (cod_categoria),
constraint fk2_sub_categoria foreign key (cod_sub_categoria) references SubCategoria (cod_sub_categoria),
constraint fk3_marca foreign key (cod_marca) references Marca (cod_marca)
);
create table NFEntrada (
cod_nf_entrada integer DEFAULT nextval (‘cod_nf_entrada_seq’),
cod_fornecedor integer not null,
numero_nf integer not null,
dataEmissao date not null,
dataEntrada date not null,
qtdade_parcela integer not null,
percentualIPI real not null,
percentualDesconto real not null,
percentualEmbalagem real not null,
percentualFrete real not null,
valorTotalNota real not null,
valorTotalProduto real not null,
constraint pk_nf_entrada primary key (cod_nf_entrada),
constraint fk_nf_entrada foreign key(cod_fornecedor) references fornecedor(cod_fornecedor)
);
create table Itens_NFEntrada (
cod_nf_entrada integer not null,
cod_produto integer not null,
quantidade_itens real not null,
valorUnitarioItem real not null,
valor_unt_item real not null,
constraint pk_Itens_NFEntrada primary key(cod_nf_entrada,cod_produto),
constraint fk_Itens_NFEntrada foreign key(cod_nf_entrada) references NFEntrada(cod_nf_entrada),
constraint fk_Itens_NFEntrada2 foreign key(cod_nf_entrada) references Produtos(cod_produto));
Ai segue o codigo:
classe NFEntrada
@Entity
@Table(name=“nfentrada”)
public class NFEntrada implements Serializable
{
@Id
@SequenceGenerator(name=“cod_nf_entrada”,sequenceName=“cod_nf_entrada_seq”, allocationSize = 1 )
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = “cod_nf_entrada” )
@Column (name = “cod_nf_entrada”, nullable = false)
private int idNFEntrada;
@Column (name="numero_nf")
private int numeroNF;
@Column (name="dataemissao")
@Temporal(TemporalType.TIMESTAMP)
private Date dataEmissao;
@Column (name="dataentrada")
@Temporal(TemporalType.TIMESTAMP)
private Date dataEntrada;
@Column (name="qtdade_parcela")
private int qtdadeParcela;
@Column (name="percentualipi")
private double percentualIPI;
@Column (name="percentualdesconto")
private double percentualDesconto;
@Column (name="percentualembalagem")
private double percentualEmbalagem;
@Column(name="percentualfrete")
private double percentualFrete;
@Column(name="valortotalnota")
private double valortotalNota;
@Column(name="valortotalproduto")
private double valortotalProduto;
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="itens_nfentrada",
joinColumns={@JoinColumn(name="cod_produto")},
inverseJoinColumns={@JoinColumn(name="cod_nf_entrada")})
private Collection <Produto> produtos;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="cod_fornecedor",
insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Fornecedor fornecedor;
…construtor…gets e setters…
classe produto:
@Entity
@Table(name=“produtos”)
public class Produto implements Serializable
{
@Id
@SequenceGenerator( name = “cod_produto”, sequenceName = “cod_produto_seq”, allocationSize = 1 )
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = “cod_produto” )
@Column (name = “cod_produto”, nullable = false)
private int cod;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="cod_categoria", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Categoria categoria;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="cod_marca", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Marca marca;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="cod_sub_categoria", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Subcategoria subcategoria;
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="itens_nfentrada",
joinColumns=@JoinColumn(name="cod_nf_entrada"),
inverseJoinColumns=@JoinColumn(name="cod_produto"))
private Collection <NFEntrada> nfentradas;
@Column (name="descricao")
private String descricao;
@Column(name="unidade")
private String unidade;
@Column (name="qtdade_max")
private double qtdadeMaxima;
@Column (name="qtdade_min")
private double qtdadeMinima;
@Column (name="preco_custo")
private double precoCusto;
@Column (name="preco_venda")
private double precoVenda;
@Column (name="data_ultima_saida")
@Temporal(TemporalType.TIMESTAMP)
private Date dataUltimaSaida;
@Column (name="data_ultima_entrada")
@Temporal(TemporalType.TIMESTAMP)
private Date dataUltimaEntrada;
@Column(name="percentual_venda")
private double percentualVenda;
…construtor…gets e setters…
classe ItensNFEntrada
@Entity
@Table(name=“itens_nfentrada”)
public class ItensNFEntrada implements Serializable
{
@EmbeddedId
private ItensNFEntradaPK chaveComposta; //chave composta da tabela
@Column(name="quantidade_itens")
private double qtdadeltens;
@Column(name="valor_unt_item")
private double valorUnitarioItem;
…construtor…gets e setters…
e por fim a classe da chave composta:
@Embeddable
public class ItensNFEntradaPK implements Serializable{
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="cod_produto")
private Produto produto;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "cod_nf_entrada")
private NFEntrada nfentrada;
…construtor…gets e setters…
Ai quando mando rodar acontece o seguinte erro:
Erro:object references an unsaved transient instance - save the transient instance before flushing: negocios.NFEntrada
Alguém já passou por isso?!! poderia me ajudar…estou 3 dias aqui apanhando e não saio do lugar!!!