spring-boot-starter-data-jpa @ Коллекция ManyToMany не заполнена - PullRequest
0 голосов
/ 22 января 2019

У меня проблема с коллекциями @ManyToMany, которые не загружаются при загрузке данных. Я пробовал FetchType.LAZY и FetchType.EAGER без изменений в результате.

Когда я печатаю пользовательский объект, коллекция объектов ролей пуста.

Пользователь [userId = 2, firstName = Ajay, lastName = C, email=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
}

1 Ответ

0 голосов
/ 22 января 2019

Вы можете попробовать это -

@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, обновляемый = false в @ JoinColumn

Также нашли связанный - коллекция, не заселяющая отношения многих ко многим

...