2
respostas

Como forçar o hibernate a exigir o preenchimento de uma chave estrangeira?

Qual é anotação que deve se usada para forçar que o relacionamento entre as tabelas seja obrigatório?

2 respostas

@OneToOne @JoinColumn(name = "sua_fk" , nullable=false) private SuaClasse classe;

Acredito que o constraint not null não será criada se o esquema já existir. Então, insira o constraint via sql ou apague o DB e deixar o hibernate gerar novamente.

Teste e deixo o feedback, boa sorte!

Breno, primeiramente obrigado pelas respostas. Realizei o procedimento conforme sugerido, porém o esquema foi gerado novamente sem a obrigatoriedade.

package br.com.caelum.financas.modelo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Entity
public class Aluno {

    @OneToOne
    private Perfil perfil;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String nome;

    public Perfil getPerfil() {
        return perfil;
    }

    public void setPerfil(Perfil perfil) {
        this.perfil = perfil;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
}
package br.com.caelum.financas.modelo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

@Entity
public class Perfil {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String nome;

    @OneToOne
    @JoinColumn(name = "id", nullable = false)
    private Aluno aluno;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Aluno getAluno() {
        return aluno;
    }

    public void setAluno(Aluno aluno) {
        this.aluno = aluno;
    }

}
package br.com.caelum.financas.teste;

import javax.persistence.EntityManager;

import br.com.caelum.financas.modelo.Aluno;
import br.com.caelum.financas.modelo.Perfil;
import br.com.caelum.financas.util.JPAUtil;

public class TesteAluno {

    public static void main(String[] args) {

        Aluno aluno = new Aluno();

        aluno.setNome("João");

        EntityManager manager = new JPAUtil().getEntityManager();

        manager.getTransaction().begin();

        manager.persist(aluno);
        manager.getTransaction().commit();
    }
}

Resultado Banco de Dados:

id, nome, perfil_id

'1', 'João', NULL