【问题标题】:spring-boot-starter-data-jpa@ManyToMany collection not populatingspring-boot-starter-data-jpa@ManyToMany 集合未填充
【发布时间】:2019-06-16 06:10:46
【问题描述】:

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

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

用户 [userId=2, firstName=Ajay, lastName=C, email=admin.demo@gmail.com, password=12345, roles=[]]

还尝试通过添加引用的列。但没用。

请协助。

用户和角色实体如下。

@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
}

【问题讨论】:

  • 你能粘贴你的 UserEntity 和 RoleEntity 吗?

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


【解决方案1】:

你可以试试这个——

@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\"" 而不是 schema = "\"PLATFORM_PROD_IOT\""
  3. nullable = false,@JoinColumn 中的可更新 = false

还找到了一个相关的—— collection not populating in many to many relationship

【讨论】:

  • 感谢您的回复。它也给出与上述相同的结果。
猜你喜欢
  • 2019-06-16
  • 2021-02-09
  • 2017-11-29
  • 2021-01-18
  • 2021-11-11
  • 2018-08-06
  • 1970-01-01
  • 2021-03-17
  • 2018-03-01
相关资源
最近更新 更多