我想在追隨者表中創建一個復合鍵,表中只有兩列帶有用戶的 ID。現在我有我的追隨者表,其中包含兩個外鍵和表的 id
由于我找到的所有示例都來自兩個不同的表,我怎樣才能做到這一點?
[這是我現在的方法]

【這就是我想要的】

追隨者表
public class Followers {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private long id;
@ManyToOne
@JoinColumn(name="from_user_fk")
private User from;
@ManyToOne
@JoinColumn(name="to_user_fk")
private User to;
public Followers() {};
public Followers(User from, User to) {
this.from = from;
this.to = to;
}
}
用戶表
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String lastname;
public User() {
}
@OneToMany(mappedBy="to")
private List<Followers> followers;
@OneToMany(mappedBy="from")
private List<Followers> following;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
}
uj5u.com熱心網友回復:
有兩種方法可以制作復合主鍵:
- 通過使用@Embeddable 類注釋以及@EmbeddedId 和@MapsId 欄位注釋
- 使用@IdClass 類注解
我將使用第一種方法來解釋解決方案,即使用@Embeddalbe 類注釋,后跟@EmbeddedId 和@MapsId
腳步:
第一步:使用@Embeddable 定義復合主鍵類
@Embeddable
public class FollowersId implements Serializable {
@Column(name = "from_user_fk")
private Integer userFromId;
@Column(name = "to_user_fk")
private Integer userToId;
public FollowersId (){
}
public Followers(Integer userFromId, Integer userToId) {
this.userFromId = userFromId;
this.userToId = userToId;
}
}
2) @Embeddable 類應滿足以下要求
實作可序列化
實作無引數建構式
實作equals和hashCode
3)使用@EmbeddedId和MapsId將復合主鍵類嵌入到Followers類中
@物體
public class Followers implements Serializable {
@EmbeddedId
private FollowersId id;
@ManyToOne
@JoinColumn(name="from_user_fk")
@MapsId("userFromId")
private User from;
@ManyToOne
@JoinColumn(name="to_user_fk")
@MapsId("userToId")
private User to;
public Followers() {};
public Followers(User from, User to) {
this.id = new FollowersId(from.getId(), publisher.to())
this.from = from;
this.to = to;
}
}
為連接物體創建新實體時,應手動初始化 @EmbeddedId 復合主鍵欄位,因為 Hibernate 無法通過反射設定值
否則,保存物體時,您會在控制臺中收到以下錯誤
Caused by: org.hibernate.PropertyAccessException: Could not set field value by reflection
了解更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493980.html
