休眠:Forign键需要是主键
问题描述:
我有两个实体:一个用户和一个包含(引用)用户的访客。 用户:休眠:Forign键需要是主键
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long user_id;
@Column(unique = true)
private String email;
@Column
private String password;
@Column
private String name;
@Column
private String surname;
....
}
游客:
@Entity
public class Guest {
@Id
@OneToOne
@JoinColumn(name = "user_id_fk")
private User user;
private int visits;
...
}
正如您可以猜到,我想我的外键USER_ID(user_id_fk)是我的客人的主键,但是这个代码似乎不工作。 任何帮助将不胜感激。
答
@PrimaryKeyJoinColumn
可能工作(我不知道)
您的客房等级:
@Entity
public class Guest {
@OneToOne
@PrimaryKeyJoinColumn
private User user;
private int visits;
...
}
但你应该寻找在@JoinColumn实施inheritance
答
提及列名不对外关键约束名称。
@OneToOne
@JoinColumn(name = "user_id")
private User user;
答
感谢Y. Tarion,我解决了我的问题。
对于任何人谁可能会有所帮助,我在这里发布我的代码:
用户:
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long user_id;
@Column(unique = true)
private String email;
@Column
private String password;
@Column
private String name;
@Column
private String surname;
//...constructors, getters and setters...
}
游客:
@Entity
public class Guest extends User {
private int visits;
@ManyToMany
private List<Guest> friends;
public int getVisits() {
return visits;
}
public void setVisits(int visits) {
this.visits = visits;
}
public List<Guest> getFriends() {
return friends;
}
public void setFriends(List<Guest> friends) {
this.friends = friends;
}
}
我能够通过实施解决我的问题按照你的建议继承。我一直在错误的地方寻找解决方案,甚至没有考虑继承问题。 –
非常感谢,您只是为我节省了几个小时的工作时间。 –