无法使用休眠为组合框赋值
Cannot give values to combobox using hibernate
我正在重写我的 java 应用程序以用于学习目的,因为我也优化了我的数据库。我陷入了奇怪的境地。我在当前项目的许多情况下使用的代码与我在上一个项目中使用的代码完全相同。好吧,这是我的代码和错误。我会 post 任何我认为相关的东西。请帮助我,我被困在了 5 个小时以上:/
这里是查询:
@Override
public List<UserEntity> readTest() {
session = sessionFactory.openSession();
Query query;
query = session.createQuery("SELECT ue.userId FROM UserEntity ue JOIN UserIsWorkerEntity uwe ON ue.userId = uwe.workerId JOIN WorkerHasRolesEntity wre ON uwe.workerId = wre.workerId JOIN RoleEntity re ON wre.roleId = re.roleId WHERE re.roleId = 'ISORol101'");
List<UserEntity> tableList;
tableList = query.list();
session.close();
return tableList;
}
这是我的实体 class:
@Entity
@Table(name = "user", schema = "walker", catalog = "")
public class UserEntity {
private String userId;
private String name;
private String surname;
private Date birthday;
private UserIsShopkeeperEntity userIsShopkeeperByUserId;
private UserIsWorkerEntity userIsWorkerByUserId;
@Id
@Column(name = "UserID", nullable = false, length = 20)
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
@Basic
@Column(name = "Name", nullable = true, length = 35)
public String getName() {
return name;
}
}
Here is some code from the controller (of the fxml)
@FXML
private ComboBox<UserEntity> cbSaleman;
cbSaleman.getItems().clear();
List<UserEntity> userEntityList = userIM.readTest();
for (UserEntity userEntity : userEntityList) {
userList.add(userEntity);
}
cbSaleman.getItems().addAll(userList);
错误如下:
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class Entities.UserEntity (java.lang.String is in module java.base of loader 'bootstrap'; Entities.UserEntity is in unnamed module of loader 'app')
并指向行中:
for (UserEntity userEntity : userEntityList) {
请帮忙。先感谢您!
我真的很绝望。。我在兜圈子。
您的 JPQL/HQL 查询
SELECT ue.userId FROM UserEntity ue JOIN UserIsWorkerEntity ...
仅从数学运算 UserEntity
中选择 userId
字段; userId
当然是字符串。 Java 编译器无法确定您的查询 return 类型(因为它们是由 JPQL 字符串定义的),因此 readTest()
方法中的编译时类型检查失败, returned 的 List
由 String
填充,而不是 UserEntity
个实例。
稍后,当您尝试遍历 returned 列表 (userEntityList
) 时,您隐式尝试将每个元素向下转换为 UserEntity
,导致 ClassCastException
.
您需要的是 Query
到 return UserEntity
实例本身,而不仅仅是它们的 ID:
SELECT ue FROM UserEntity ue JOIN UserIsWorkerEntity ...
我正在重写我的 java 应用程序以用于学习目的,因为我也优化了我的数据库。我陷入了奇怪的境地。我在当前项目的许多情况下使用的代码与我在上一个项目中使用的代码完全相同。好吧,这是我的代码和错误。我会 post 任何我认为相关的东西。请帮助我,我被困在了 5 个小时以上:/
这里是查询:
@Override
public List<UserEntity> readTest() {
session = sessionFactory.openSession();
Query query;
query = session.createQuery("SELECT ue.userId FROM UserEntity ue JOIN UserIsWorkerEntity uwe ON ue.userId = uwe.workerId JOIN WorkerHasRolesEntity wre ON uwe.workerId = wre.workerId JOIN RoleEntity re ON wre.roleId = re.roleId WHERE re.roleId = 'ISORol101'");
List<UserEntity> tableList;
tableList = query.list();
session.close();
return tableList;
}
这是我的实体 class:
@Entity
@Table(name = "user", schema = "walker", catalog = "")
public class UserEntity {
private String userId;
private String name;
private String surname;
private Date birthday;
private UserIsShopkeeperEntity userIsShopkeeperByUserId;
private UserIsWorkerEntity userIsWorkerByUserId;
@Id
@Column(name = "UserID", nullable = false, length = 20)
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
@Basic
@Column(name = "Name", nullable = true, length = 35)
public String getName() {
return name;
}
}
Here is some code from the controller (of the fxml)
@FXML
private ComboBox<UserEntity> cbSaleman;
cbSaleman.getItems().clear();
List<UserEntity> userEntityList = userIM.readTest();
for (UserEntity userEntity : userEntityList) {
userList.add(userEntity);
}
cbSaleman.getItems().addAll(userList);
错误如下:
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class Entities.UserEntity (java.lang.String is in module java.base of loader 'bootstrap'; Entities.UserEntity is in unnamed module of loader 'app')
并指向行中:
for (UserEntity userEntity : userEntityList) {
请帮忙。先感谢您! 我真的很绝望。。我在兜圈子。
您的 JPQL/HQL 查询
SELECT ue.userId FROM UserEntity ue JOIN UserIsWorkerEntity ...
仅从数学运算 UserEntity
中选择 userId
字段; userId
当然是字符串。 Java 编译器无法确定您的查询 return 类型(因为它们是由 JPQL 字符串定义的),因此 readTest()
方法中的编译时类型检查失败, returned 的 List
由 String
填充,而不是 UserEntity
个实例。
稍后,当您尝试遍历 returned 列表 (userEntityList
) 时,您隐式尝试将每个元素向下转换为 UserEntity
,导致 ClassCastException
.
您需要的是 Query
到 return UserEntity
实例本身,而不仅仅是它们的 ID:
SELECT ue FROM UserEntity ue JOIN UserIsWorkerEntity ...