2 votes

JoinColumn à une clé étrangère

J'essaie d'y parvenir avec Hibernate : table relationship

Mes codes sont les suivants :

Modèle de dispositif

@Entity
public class Device {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
private long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "fk_user", nullable = true, referencedColumnName = "ID")
private User user;
...
}

Modèle statistique

@Entity
public class Statistic {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
private long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({ @JoinColumn(name = "fk_device", nullable = false, referencedColumnName = "ID"),
        @JoinColumn(name = "fk_device_user", nullable = false, referencedColumnName = "fk_user") })
private Device device;
...
}

Cependant, il y a une erreur disant qu'il n'y a pas de colonne logique fk_user dans le périphérique.

Caused by: org.hibernate.MappingException: Unable to find column with logical name: fk_user in device

Je suppose que c'est parce que fk_user est une clé étrangère. Mais comment puis-je résoudre ce problème ? Merci.

2voto

Maciej Kowalski Points 12727

Sur la base de votre schéma, je mettrais en correspondance l'entité Device comme suit :

public class Devince{

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "user_id", nullable = true)
  private User user;
  ...
  }

}

Vous n'avez pas besoin de la referencedColumnName car vous faites référence à la User clé primaire de l'entité. Si vous voulez faire référence à une colonne de clé non primaire, cela sera nécessaire.

Concernant l'entité Statistic :

public class Statistic {
  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumns({ @JoinColumn(name = "device_id", nullable = false),
        @JoinColumn(name = "device_user_id", nullable = false, 
  referencedColumnName = "user_id") })
  ...
  }
}

Encore une fois, vous n'avez besoin que du referencesColumnName dans la seconde @JoinColumn .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X