我正在创建一个小型社交媒体,但我不知道映射 friend 请求实体的最佳方法。如果它应该是多对一或一对多,因为好友请求类引用用户实体类两次。一个用于请求的接收者,一个用于请求的发送者。请你帮我看看我的代码,看看我做的是否正确?
@Component
@Entity
@Table(name = "Users")
public class User extends DefaultEntity {
@Column(name = "FirstName")
@NotNull(message = "Enter a FirstName")
private String firstName;
@Column(name = "LastName")
@NotBlank(message = "Enter a LastName")
private String lastName;
@Column(unique = true,name = "UserName")
@NotBlank(message = "Enter a UserName")
private String userName;
@Column(unique = true, name = "Email")
@NotBlank(message = "Please enter an Email address")
@Email(message = "Enter a valid Email")
private String email;
@Column(name = "Password")
@NotBlank(message = "Enter a Password")
private String password;
@Enumerated(EnumType.STRING)
@Column(name = "Gender")
private Gender gender;
@Column(name = "Address")
@NotBlank(message = "Please enter your Home Address")
private String address;
@Column(name = "Country")
@NotBlank(message = "Please enter your Country")
private String country;
@Column(name = "Picture")
private String picture;
@Column(unique = true, name = "PhoneNumber") //make this accept only numbers
private String phoneNumber;
@Column(name = "Bio")
private String bio;
@Column(name = "OnlineStatus")
private OnlineStatus onlineStatus;
@Enumerated(EnumType.STRING)
@Column(name = "UserType")
private UserType userType;
@Column(name = "Money")
private long money;
//@MapsId()
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "playerstats")
private PlayerStats playerStats;
}
这是好友请求实体:
@Component
@Entity
@Table(name = "FriendRequest")
public class FriendRequest extends DefaultEntity {
private User sender;
private FriendRequestStatus friendRequestStatus;
private User recipient;
public User getSender() {
return sender;
}
public void setSender(User sender) {
this.sender = sender;
}
public User getRecipient() {
return recipient;
}
public void setRecipient(User recipient) {
this.recipient = recipient;
}
public FriendRequestStatus getFriendRequestStatus() {
return friendRequestStatus;
}
public void setFriendRequestStatus(FriendRequestStatus friendRequestStatus) {
this.friendRequestStatus = friendRequestStatus;
}
}
请问我的好友请求实体(尤其是其中的用户对象)映射正确吗?
最佳答案
让我们考虑一下请求与其发送者之间的关联。一个请求有一个发送者。否则,发件人字段将是用户的集合,并将命名为 senders
。因此它不可能是 ToMany 关联:它引用一个用户。
现在,是一对一还是多对一?同一用户可以发送多个请求。我猜是这样。每个人都只有一个 friend 的生活会有点悲伤不是吗?因此,多个请求可以引用同一发送者,或者,如果您愿意,用户可以发送多个请求。所以这是一个多对一。
我会让你对另一个关联进行推理。
请注意,使用 Component 注释实体是完全没有意义的。那些不是Spring bean。 Spring 不会实例化它们,也不会注入(inject)它们。
关于java - 如何在spring data jpa中映射好友请求实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47105083/