5
respostas

OneToOne entre tabelas sem Id e persistência em cadeia usando Sequence

Bom dia pessoal, estou com uma dúvida violenta!!! Tenho um banco Oracle que usa Sequences, tenho 2 tabelas sendo uma delas a "Pai" da outra, o Id da tabela "Pai" é o id da tabela filha, procurei por milhões de modelos mas não consegui realizar esse modelo, Pois quero que ao persistir a Entidade "Pai" tendo o filho preenchido, quero que o id da sequence do pai seja passado para o filho e persistido os dois em um unico "save", alguem pode dar uma ajuda? vlwww

//Pai
@Entity
@Table(name="produto")
public class Produto {

    @Id
    @Column("ID_PRODUTO")
    @GeneratedValue(generator = "PRODUTO_SQ_TRANSACAO_GENERATOR")
    @SequenceGenerator(name = "PRODUTO_SQ_TRANSACAO_GENERATOR", sequenceName = "SQ_PRODUTO")
    private Long id;

    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn("ID_PRODUTO")
    private DetalhesProduto detalhesProduto;

    //Outros itens

} 


//Filho
@Entity
@Table(name="detalhes_produto")
public class DetalhesProduto {

    @Id
    @OneToOne(mappedBy = "detalhesProduto")
    @JoinColumn("ID_PRODUTO")
    private Produto produto;

    //Outros itens

}
5 respostas

Fala ai David, tudo bem ?

A única forma de fazer isso que você deseja, estou vendo que é fazer dois saves.

Outra coisa que pode fazer é ter outra coluna que seja o id apenas para o banco, que isso vai fazer seu cascade funcionar sem nenhum problema.

Matheus muito obrigado, eu pesquisei muito e não consegui uma solução "bonita", eu retirei o Sequence do objeto e fiz um "add" para o id e no "add" setei o id no filho, Tentei usar o @PrePersist para passar o id do pai para o filho, mas o engraçado que durante o PrePersist o filho ficou todo "null", você tem alguma ideia do porque?

Em tese, não deveria estar nulo, não faz muito sentido.

Como está fazendo ?

Então estou usando o Spring Data JPA + Hibernate e usando o JpaRepository, aparentemente pelo que eu pesquisei, para os listenners com usando esse conjunto, deveria habilitar usando uma dependência do Hibernate, mas nem assim foi. Mas infelizmente vou adotar o uso de 2 saves :/ mas vou continuar pesquisando se existe uma solução, muito obrigado Matheus pela ajuda vlw mesmo cara!!!!

se encontrar posta aqui ? Fiquei curioso também, vou pesquisar algum coisa e se achar atualizo aqui.