我在开发使用 Hibernate 进行 ORM 的 Spring Boot 应用程序时遇到问题。
Could not extract column [3] from JDBC ResultSet [Bad value for type long : Allows creating new projects] [n/a]"
**我有以下数据库表: **
角色表:包含角色ID(长)和名称(字符串)。
权限表:包含权限ID(长)、描述(文本)和权限(字符串)。
Role_Permission 表:将角色 ID 链接到权限 ID 的多对多映射表。
这是角色实体中的设置
@Entity
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@Column(name = "name", nullable = false, unique = true)
private String name;
@ManyToMany
@JoinTable(
name = "role_permission",
joinColumns = @JoinColumn(name = "role_id"),
inverseJoinColumns = @JoinColumn(name = "permission_id")
)
private Set<Permission> permissions;
@OneToMany(mappedBy = "role")
private Set<User> users;
这是权限实体
@Entity
@Table(name = "permissions")
public class Permission {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@Column(name = "permission", nullable = false)
private String permission;
@Lob
@Column(name = "description", nullable = true, columnDefinition = "text")
private String description;
@ManyToMany(mappedBy = "permissions")
private Set<Role> roles;
相关用户实体代码
@ManyToOne
@JoinColumn(name = "role_id", nullable = false)
private Role role;
User newUser = new User();
newUser.setUsername(registrationDto.getUsername());
newUser.setEmail(registrationDto.getEmail());
newUser.setPassword(bCryptPasswordEncoder.encode(registrationDto.getPassword()));
newUser.setRole(roleRepository.findByName(registrationDto.getRole()));
Role manager = newUser.getRole();
我认为问题是没有加载权限,而是有 PersistanceSet 对象并且它已设置= null
我尝试过 FetchType.EAGER 加载,但它没有改变任何东西。我不明白为什么它获取具有给定角色的所有用户而不是单个权限。
是的,我的 role_permission 表已正确填充:D
ps:抱歉,如果这篇文章的格式错误,这是我在这里发表的第一篇文章。
将原始 long 更改为包装器 Long 以实现空安全,然后更改角色和权限类中的关联(还可以初始化集合以避免空集):
许可实体:
@ManyToMany(mappedBy = "permissions", fetch = FetchType.LAZY)
private Set<Role> roles = new HashSet<>();
角色实体:
@OneToMany(mappedBy = "role", fetch = FetchType.LAZY)
private Set<User> users = new HashSet<>();