java – Foreign key is not printed in table

Question:

I have an entity that has a OneToOne relationship with another entity, but the foreign key of the other entity is not being printed in the table, the field is empty

Entity that has the OneToOne relationship

@Entity
public class LivroOrdem implements Serializable {

private static final long serialVersionUID = 1L;
// ATRIBUTOS
private Long idLivroOrdem;
private Art art;
private Date dataRealInicio;
private Date dataPrevistaConclusaoObra;
//private List<Relato> relatos;
private Relato relato;

// @OneToMany(fetch = FetchType.LAZY, mappedBy = "livroOrdem")
// CONSTRUTOR PADRÃO
public LivroOrdem() {
}

// OUTROS CONSTRUTORES
public LivroOrdem(Date dataRealInicioObra, Date dataPrevistaConclusaoObra) {
    this.dataRealInicio = dataRealInicioObra;
    this.dataPrevistaConclusaoObra = dataPrevistaConclusaoObra;
}

// GETTERS E SETTERS
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
//@Column(name = "idlivroOrdem", unique = true, nullable = false)
public Long getIdLivroOrdem() {
    return idLivroOrdem;
}

public void setIdLivroOrdem(Long idLivroOrdem) {
    this.idLivroOrdem = idLivroOrdem;
}

@Temporal(javax.persistence.TemporalType.TIMESTAMP)
public Date getDataRealInicio() {
    return dataRealInicio;
}

public void setDataRealInicio(Date dataRealInicio) {
    this.dataRealInicio = dataRealInicio;
}

@OneToOne
public Art getArt() {
    return art;
}

public void setArt(Art art) {
    this.art = art;
}

@Temporal(javax.persistence.TemporalType.TIMESTAMP)
public Date getDataPrevistaConclusaoObra() {
    return dataPrevistaConclusaoObra;
}

public void setDataPrevistaConclusaoObra(Date dataPrevistaConclusaoObra) {
    this.dataPrevistaConclusaoObra = dataPrevistaConclusaoObra;
}

/*
@OneToMany(mappedBy = "relatos")
public List<Relato> getRelatos() {
return relatos;
}
public void setRelatos(List<Relato> relatos) {
this.relatos = relatos;
}*/

@ManyToOne
public Relato getRelato() {
    return relato;
}

public void setRelato(Relato relato) {
    this.relato = relato;
}

@Override
public int hashCode() {
    int hash = 3;
    hash = 67 * hash + (this.idLivroOrdem != null ? this.idLivroOrdem.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final LivroOrdem other = (LivroOrdem) obj;
    if (this.idLivroOrdem != other.idLivroOrdem && (this.idLivroOrdem == null || !this.idLivroOrdem.equals(other.idLivroOrdem))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "LivroOrdem{" + "idLivroOrdem=" + idLivroOrdem 
            + ", art=" + art 
            + ", dataRealInicioObra=" + dataRealInicio 
            + ", dataPrevistaConclusaoObra=" + dataPrevistaConclusaoObra 
            + ", relato=" + relato + '}';
}

}

Database Table

ID |     DATA INICIO     |       DATA FIM      |ART_IDART (FK)
4  |"2018-11-30 00:00:00"|"2018-11-20 00:00:00"|  "";  
5  |"2018-11-30 00:00:00"|"2018-11-21 00:00:00"|  ""; 

Answer:

On the getter where you are defining the relationship between your fields is:

@OneToOne
public Art getArt() {
    return art;
}

When in fact it should be returning a direct reference to the object that your class models, like this:

@OneToOne
public Art getArt() {
    return this.art;
}

To learn more about how 'this' works see and to understand more about how relationships are mapped see

If your application is just a test application, consider deleting the table and creating it again.

Scroll to Top