java - JPA 自引用实体

标签 java hibernate jpa

我有一个名为 User 的表:

public class User
{
    private Long userId;
    private String username;
    //Other fields;
}

现在假设用户可以有其他用户 friend 。那么我如何在 JPA 中创建这种关系。

与此同时,我在数据库的用户表中执行此操作:

USER_ID 
USERNAME
USER_FRIENDS

在用户实体中是这样的:

public class User
{
    private Long userId;
    private String username;
    //Other fields;
    @OneToMany(cascade = CascadeType.ALL)
    @Column(name = "USER_FRIENDS")
    private List<UserEntity> friends;
}

这行不通。那么,我如何在 JPA 中实现这一点?提前致谢!

最佳答案

在@Florian Schaetz 的研究和帮助下,我找到了自引用实体的解决方案。 需要的是用户可以有其他用户 friend ,并且该用户可以成为其他用户的 friend 。所以,我所做的是这样的:

public class User
{
    private Long userId;
    private String username;
    //Other fields;
    @JoinTable(name = "USER_FRIENDS", joinColumns = {
    @JoinColumn(name = "ADDING_USER", referencedColumnName = "USER_ID", nullable =   false)}, inverseJoinColumns = {
    @JoinColumn(name = "ADDED_USER", referencedColumnName = "USER_ID", nullable = false)})
    @ManyToMany
    private Collection<User> friends;

    @ManyToMany(mappedBy = "friends")
    private Collection<User> addUser;
}

希望这对其他人有帮助!再次感谢 friend 们!

关于java - JPA 自引用实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31884500/

相关文章:

java - Spring Boot、多数据源和 JNDI 连接

Java 锁定数组范围

java - Java println 调用中的字符转换有何作用?

java - Hibernate 5 无法比较字符串和 int

hibernate - 缓存 spring/hibernate webapp

java - em.persist() JPA 中需要父实体对象

java - 在 Java 中使用 AWS Alexa 启动桌面应用程序

Hibernate/JPA 和 PostgreSQL - 主键?

java - JsonMappingException : lazily initialize a collection without using @Jsonignore的解决方法

java - 如何从 JSP 页面保存 JPA 实体模型属性的特定属性