Por favor, vejam se estou fazendo algo de errado nesse relacionamento Um para Muitos unidirecional.
Tenho duas tabelas:
- A tabela convênio
create table CCP.CCP_CONVENIO
(
NUMR_CONVENIO NUMBER(8) not null, <--Chave primária gerada manualmente.
...
)
- A tabela de integrantes
create table INTEGRANTE
(
ID NUMBER(10) not null, <--Chave primária gerada por uma sequence.
...
NUMR_CONVENIO NUMBER(8) not null,
)
As duas se relacionam de modo que um convênio contém vários integrantes, então mapiei minhas entidades assim:
1)A entidade Convênio
@Entity
@Table(name="CONVENIO")
public class Convenio implements Serializable {
private static final long serialVersionUID = 1L;
@Id @Column(name="NUMR_CONVENIO")
private Integer numrConvenio;
...
@OneToMany(cascade={CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name="NUMR_CONVENIO")
private Collection<Integrante> integrantes;
- A entidade Integrante
@Entity @Table(name="CCP_INTEGRANTE_CONVENIO")
public class IntegranteConvenio implements Serializable {
private static final long serialVersionUID = 1L;
@Id @Column(name="ID_INTEGRANTE")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="INTGTCONVN_SQ")
@SequenceGenerator(name="INTGTCONVN_SQ", sequenceName="INTGTCONVN_SQ")
private Long id;
...
Em alguma parte da minha aplicação tenho algo parecido com:
Convenio c = new Convenio();
Integrante i = new Integrante();
c.setNumrConvenio(1);
c.addIntegrante(i);
tx.begin(); // tx é a transação
em.merge(c);
tx.commit();
Mas o banco me retorna o erro:
Olhando o log dos SQL vejo que realmente o Hiernate não passa o número do convênio a hora do INSERT
Hibernate:
insert
into
CCP_INTEGRANTE_CONVENIO
(ID_PESSOA, STAT_INTEGRANTE, ID_INTEGRANTE_CONVENIO)
values
(?, ?, ?)
PORQUE, MINHA NOSSA SENHORA DAS PERSISTENCIAS!? :shock:
Já estou doido com isso. Não era para a JPA salvar o convênio e começar a salvar os integrantes passando o número do convênio para a tabela de integrantes??? Não é para isso que serve o cascade!??
Será que estou fazendo algo de errado? Já tentei colocar o CascadeType.ALL e deu na mesma. Já tentei usar o mappedBy aí é que deu errado mesmo já que o relacionamento é unidirecional e o integrante não conhece seu convênio, Já tentei por FetchType.EAGER e num deu em nada. Já tentei tirar o @JoinColumn. També já tentei mudar ele para @JoinColumn(referencedColumnName="“NUMR_CONVENIO”) e nada. Mesmo sem dever mudei o relacionamento para @ManyToMany.
Não sei mais o que faço…
