[RESOLVIDO] Persistência - Salvar tabela filho com foreign key para tabela pai, not null

2 respostas Resolvido
hibernate
G

Seguinte Galera,

Tenho duas entidades Administrator e Address, administrator tem um lista de address e address tem um administrator

Segue mapeamento de Administrator:

@Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 @ApiModelProperty(notes = "The database generated administrator ID")
  val administrator_id: Long = 0L,

  @ApiModelProperty(notes = "The administrator name", required = true)
   val name: String = "",

  @ApiModelProperty(notes = "The administrator phone number")
   val phone: String = "",

  @OneToMany(mappedBy = "administrator", cascade = [CascadeType.ALL], fetch = FetchType.EAGER)
  @ApiModelProperty(notes = "The administrator address")
   var address: List<Address> = emptyList(),

   @ApiModelProperty(notes = "The administrator username", required = true)
    val login: String = "",

  @ApiModelProperty(notes = "The administrator password", required = true)
   val password: String = ""

Segue mapeamento de Address:

@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @ApiModelProperty(notes = "The database generated address ID")
    val id: Long = 0L,

    @ApiModelProperty(notes = "The name of the street")
    val street: String = "",

    @ApiModelProperty(notes = "The name of the neighborhood")
    val neighborhood: String = "",

    @ApiModelProperty(notes = "The name of the state")
    val state: String = "",

    @ApiModelProperty(notes = "The name of the city")
    val city: String = "",

    @ApiModelProperty(notes = "The number of the CEP")
    val cep: String = "",

    @ApiModelProperty(notes = "The address complement", required = true)
    val complement: String = "",

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="administrator", insertable=true, updatable=true)
    @ApiModelProperty(notes = "The address complement", required = true)
    var administrator: Administrator? = null

O mapeamento gera as tabelas no banco, tudo certo porém quando faço a requisição para meu endpoint ele salva a entidade Administrator e Address, porém o campo de relação não é salvo. Segue requisição

{

address: [

{

cep: 00000-000,

city: Cidade,

complement: Complemento,

neighborhood: Bairro,

state: Estado,

street: Rua

}

],

login: nomedousuario,

name: nome,

password: senha,

phone: telefone

}

Acredito que alguma coisa no mapeamento quando colocar pra salvar a entidade Administrator deva salvar tbm o endereço com o id do administrator, mas não estou conseguindo

OBS: O código está em Kotlin podem achar estranho algo na declaração das variaveis, porém a maior duvida é como salvar as duas entidades e na entidade Address ir a chave primaria da tabela Administrator

2 Respostas

fbirf
Solucao aceita

Olá!

Pelo que eu entendi a tabela pai é Administrator. Ela deve ser salva sempre antes de salvar a tabela Address. Feito isso você deve setar a referência do atributo administrator da classe Address para depois salvar esta entidade.

A ordem de salvar importa neste caso.

Espero ter ajudado. Boa sorte.

G

Isso mesmo, o que esperava é que ao mandar o payload ele fizesse o cadastro do total, ja que tem toda a relação one to many

Criado 14 de dezembro de 2018
Ultima resposta 21 de dez. de 2018
Respostas 2
Participantes 2