gpt4 book ai didi

java - [Ljava.lang.Object;无法转换为project.model.Role

转载 作者:行者123 更新时间:2023-11-30 07:55:43 24 4
gpt4 key购买 nike

我正在尝试使用连接值显示表中的角色名称及其 ID。

应该发生的是这样的:

  • 用户登录,用户的 id 保存在变量中

  • 我们查询连接表“user_roles”以获取用户拥有的角色列表,连接表有两个键:“iduser”和“idrole”,它们都是用户表和角色表的外键

  • 然后我需要按角色名称(在角色列表上)显示角色,这给了我:

    java.lang.ClassCastException: [Ljava.lang.Object;无法转换为 prj.model.Rolejavax.faces.FacesException: #{userloginMB.login}: java.lang.ClassCastException: [Ljava.lang.Object;无法转换为 prj.model.Role

我的角色文件如下:

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;



@Entity
@Table(name="ROLES")
public class Role {



@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idrole;


public int getIdrole() {
return idrole;
}

public void setIdrole(int idrole) {
this.idrole = idrole;
}

public String getRole() {
return role;
}

public void setRole(String role) {
this.role = role;
}

private String role;
}

我的查询是这样的:

    public List<Role[]> getRolesByUserId(int iduser) {
//Query query = getSessionFactory().getCurrentSession().createQuery("from Role r INNER JOIN r.userRoles a where a.iduser = :Iduser").setParameter("Iduser", iduser);
List<Role[]> list = (List<Role[]>) getSessionFactory().getCurrentSession().createSQLQuery("SELECT * FROM roles WHERE idrole IN (SELECT idrole FROM User_Roles WHERE iduser = :Iduser)").setParameter("Iduser", iduser).list();

return list;
}

托管 bean 函数获得角色:

public List<Role[]> getUserRoles() {
if(userRoles == null){
userRoles = new ArrayList<Role[]>();
userRoles.addAll(getRoleService().getRoleByUserId(getIduser()));

}
return userRoles;
}

public void setUserRoles(List<Role[]> userRoles) {
this.userRoles = userRoles;
}

最后是显示:

            userRoles = getUserRoles();
for (Role[] role : userRoles){
System.out.println(role[1].getIdrole());
System.out.println(role[1].getRole());
}

注意:我手动知道该表有两个该用户的条目,这就是为什么我在创建 foreach 或任何中继器之前进行这样的测试。

最佳答案

问题在于您使用的是 native SQL 查询,它将返回“原始”值。

要使 hibernate 为您提供 Role 类,您可以像这样设置实体类型。

createSQLQuery("SELECT * FROM roles WHERE idrole IN (SELECT idrole FROM User_Roles WHERE iduser = :Iduser)").setParameter("Iduser", iduser).addEntity(Role.class).list();

如需进一步引用,请查看文档 here

关于java - [Ljava.lang.Object;无法转换为project.model.Role,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32705158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com