1
resposta

Relacionamento @OneToMany não está inserindo registro na tabela

Bom dia,

Estou com um problema de relacionamentos @OneToMany, tenho a tabela Procedimento em que ela pode ter multiplos documentos.

@Entity
@Table(name = "T_SUST_PROCEDIMENTO_S")
public class Procedimentos {

    @Id
    @Column(name = "PK")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SPK_T_SUST_PROCEDIMENTOS_S")
    @SequenceGenerator(name = "SPK_T_SUST_PROCEDIMENTOS_S",sequenceName = "SPK_T_SUST_PROCEDIMENTOS_S",allocationSize = 1)
    private int id;    

    @Column(name = "FK_DOCS")
    @OneToMany(mappedBy="id", cascade = {CascadeType.ALL})
    private List<Documentos> documentos;

E na classe documentos tenho um campo de procedimentosmas esse campo não está repesentado na tabela, pois so quero gravar o id do documento na tabela de procedimentos, representado pelo campo FK_DOCS que é uma chave estrangeira

@Entity
@Table(name = "T_SUST_DOCS_S")
public class Documentos  {

    @Id
    @Column(name = "PK")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SPK_T_SUST_GERAL_S")
    @SequenceGenerator(name = "SPK_T_SUST_GERAL_S",sequenceName = "SPK_T_SUST_GERAL_S",allocationSize = 1)
    private int id;

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "procedimentos_id")
    private Procedimentos procedimentos;

mas quando faço o insert do procedimentos ele não contém o campo FK_DOCS :

Hibernate: 
    insert 
    into
        t_sust_procedimento_s
        (fk_analista, dt_procedimento, ds_resu_procedimento, fk_malha_batch, fk_chave, fk_sistemas, cd_ticket, pk) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?)

Agora não sei se o erro esta na configuração das anotações, ou o próprio esquema de tabelas está errado,

Obrigado.

1 resposta

Olá Gabriel, tudo bem? Peço desculpas pela demora em ti responder! Penso que o problema está na questão de entendimento a cerca da estrutura do banco de dados, veja bem, quando usando um relacionamento OneToMany então o ID que referencia a tabela pai deve está na tabela filha, vou explicar melhor colocando no seu contexto:

Na tabela Procedimentos você tem a anotação @OneToMany e na tabela Documentos você tem a anotação @ManyToOne, nesse caso o correto é que apenas na tabela Documentos tenha um campo com o nome procedimento_id para referenciar o procedimento ao qual o documento pertence, porém nesse caso você está querendo que na tabela Procedimentos tenha o campo FK_DOCS que vai apontar para os documentos, porém isso não é possível, porque um registro, ou seja um campo não pode ter referencia para varios registros de outra tabela, nesse caso seria preciso usar um relacionamento ManyToMany assim teria uma tabela associativa para fazer essas referências.

Espero ter ajudado!