@ManyToMany 集合未填充 spring-boot-starter-data-jpa
@ManyToMany collection not populating with spring-boot-starter-data-jpa
@ManyToMany 集合在数据加载时未填充,我遇到了问题。我试过 FetchType.LAZY 和 FetchType.EAGER,结果没有任何变化。
当我打印用户对象时,角色集合对象是空的。
用户 [userId=2, firstName=Ajay, lastName=C, email=admin.demo@gmail.com, password=12345, roles=[]]
也尝试通过添加引用的列。但是没用。
请协助。
用户和角色实体如下。
@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
}
@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
}
在 class 角色中尝试。
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "USER_ROLE_MAPPING",joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "USER_ID""))
private Set<Role> roles = new HashSet<>();
并且在 class 中,用户将 fetchType 更改为 EAGER。如果它不起作用,请尝试将 table 更改为不同的名称。示例:用户、角色。它不起作用,因为它在 SQL 数据库中具有相同的名称。
@ManyToMany 集合在数据加载时未填充,我遇到了问题。我试过 FetchType.LAZY 和 FetchType.EAGER,结果没有任何变化。
当我打印用户对象时,角色集合对象是空的。
用户 [userId=2, firstName=Ajay, lastName=C, email=admin.demo@gmail.com, password=12345, roles=[]]
也尝试通过添加引用的列。但是没用。
请协助。
用户和角色实体如下。
@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
}
@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
}
在 class 角色中尝试。
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "USER_ROLE_MAPPING",joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "USER_ID""))
private Set<Role> roles = new HashSet<>();
并且在 class 中,用户将 fetchType 更改为 EAGER。如果它不起作用,请尝试将 table 更改为不同的名称。示例:用户、角色。它不起作用,因为它在 SQL 数据库中具有相同的名称。