java - Hibernate - 在查询中映射多个枚举集
问题描述
我有以下表格:
user
- id BIGINT
- name VARCHAR
user_roles
- id BIGINT
- user_id BIGINT - FK TO USER
- name VARCHAR (name of the role)
所以通过使用这个我们可以为用户分配多个角色。在Java中有UserRole
枚举。如何加载具有分配角色的 Hibernate 用户记录?
我有以下代码
private Set<UserRole> userRoles;
@ElementCollection(targetClass=UserRole.class)
@Enumerated(EnumType.STRING)
@CollectionTable(name="user_role")
@Column(name="name")
public Set<UserRole> getUserRoles() {
return userRoles;
}
public void setUserRoles(Set<UserRole> userRoles) {
this.userRoles= userRoles;
}
我这样查询:
CriteriaBuilder criteriaBuilder = sessionFactory.getCurrentSession().getCriteriaBuilder();
CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class);
Root<User> queryRoot = criteriaQuery.from(User.class);
queryRoot.join("userRoles", JoinType.LEFT);
TypedQuery<User> query = sessionFactory.getCurrentSession().createQuery(criteriaQuery);
return query.getResultList();
查询运行,但是当我尝试访问角色 Set 时,它说
com.sun.jdi.InvocationException occurred invoking method.
我究竟做错了什么?
解决方案
推荐阅读
- python - 有向图中的深度:查找距给定节点 k 距离处的节点
- excel-formula - IFERROR 不返回数组并因此破坏 SUMPRODUCT 结果
- python - 创建空数据框的副本并根据条件为其分配值
- php - 使用 PHP 连接 firebird 远程
- node.js - 错误:EACCES:权限被拒绝,打开“/home/myname/.config/insight-nodejs/insight-yo.json.3782504431”
- flutter - 根据未来设置初始值并响应值变化的正确方法
- c# - 错误说它无法将字符串转换为 int
- docker - 出现错误 - 构建包含 docker 命令以运行 ant 目标的 docker 文件时出现“build.xml 不存在”
- c# - 使用代码访问带有变量的gridview列
- java - Spring Integration + 过滤器 + 向 REST 控制器发送 400 错误请求