java - spring-boot-starter-data-jpa@ManyToMany 集合未填充

标签 java spring-boot jpa spring-boot-jpa

我遇到了 @ManyToMany 集合在数据加载时未填充的问题。我尝试过 FetchType.LAZY 和 FetchType.EAGER,结果没有任何变化。

当我打印用户对象时,角色集合对象为空。

用户 [userId=2、firstName=Ajay、lastName=C、电子邮件=admin.demo@gmail.com、密码=12345、角色=[]]

还尝试添加引用列。但没有成功。

请协助。

用户和角色实体如下。

@Entity
@Table(name = "\"USER\"", schema = "\"PLATFORM_PROD_IOT\"", uniqueConstraints = {
     @UniqueConstraint(columnNames = { "\"EMAIL_ID\"" }) })
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Size(min = 1, max = 50)
    @Column(name = "\"USER_ID\"")
    private Long userId;

    @NotBlank
    @Size(min = 3, max = 50)
    @Column(name = "\"FIRST_NAME\"")
    private String firstName;

    @NotBlank
    @Size(min = 3, max = 50)
    @Column(name = "\"LAST_NAME\"")
    private String lastName;

    @NaturalId
    @NotBlank
    @Size(max = 50)
    @Email
    @Column(name = "\"EMAIL_ID\"")
    private String email;

    @NotBlank
    @Size(min = 3, max = 100)
    @Column(name = "\"PASSWORD\"")
    private String password;


    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "\"USER_ROLE_MAPPING\"", schema = "\"\PLATFORM_PROD_IOT\"", joinColumns = @JoinColumn(name = "\"USER_ID\""), inverseJoinColumns = @JoinColumn(name = "\"ROLE_ID\""))
    private Set<Role> roles = new HashSet<>();

//Getters and Setters

}

@Entity
@Table(name = "\"ROLE\"",schema="\"PLATFORM_PROD_IOT\"")
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="\"ROLE_ID\"")
    private Long roleId;

    @Column(name="\"ROLE_NAME\"")
    private RoleName name;
//Getters and Setters
}

最佳答案

你可以试试这个 -

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "\"USER_ROLE_MAPPING\"", catalog = "\"PLATFORM_PROD_IOT\"", joinColumns = { 
            @JoinColumn(name = "\"USER_ID\"", nullable = false, updatable = false) }, 
            inverseJoinColumns = { @JoinColumn(name = "\"ROLE_ID\"", 
                    nullable = false, updatable = false) })
    private Set<Role> roles = new HashSet<>();


public Set<Role> getRoles() {
    return roles;
}

public void setRoles(Set<Role> roles) {
    this.roles = roles;
}

这里我添加了

  1. cascade = CascadeType.ALL
  2. catalog = "\"PLATFORM_PROD_IOT\"" instead of schema = "\"PLATFORM_PROD_IOT\""
  3. nullable = false, updatable = false in @JoinColumn

还发现了相关的 - collection not populating in many to many relationship

关于java - spring-boot-starter-data-jpa@ManyToMany 集合未填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54313929/

相关文章:

java - 将精确距离添加到 GPS 坐标

java - 如何在 Python 中加密并在 Java 中解密?

java - 为什么我在使用 Google App Engine 上的 JDO 的查询中会遇到转换错误?

JavaFX如何从其他Stage(类)访问字段(TextArea)

java - Swagger API 操作排序

java - 更改 JPA 生成的表列的数据类型

java - Optaplanner 跳过阶段并返回空解决方案

amazon-web-services - 在 AWS elasticbeanstalk 中使用 .ebextensions 配置 nginx 配置文件未找到

java - 如何清除 EntityManager 中的所有实体?

hibernate - 如何将 Java 8 LocalDateTime 与 JPA 和 Hibernate 一起使用