java - 如何在spring data jpa中映射好友请求实体

标签 java spring hibernate jpa

我正在创建一个小型社交媒体,但我不知道映射 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/

相关文章:

java - 使用 Apache POI 时出现空指针异常

java - 使用嵌套在另一个 jdbcTemplate 中的 jdbcTemplate(在结果集开始之前)

java - 使用非常旧的 JDBC 1.0 驱动程序的 Spring Batch

java - org.hibernate.dialect.PostgresPlusDialect 与 org.hibernate.dialect.PostgreSQL9Dialect 之间有什么区别?

java - Jira 评论导出 html

java - 如何在 Spring 3 中处理客户端取消请求?

java - 作为 Jcache API 的 RI 的 coherance 和 ehcache 的主要优点/缺点

java - Spring JPA/hibernate : Failed to import bean definitions

java - 在运行时更改 hibernate JPA 属性

mysql - Grails:如何将外键设为主键