com.querydsl.core.Tuple的ClassCastException

时间:2018-11-15 10:00:30

标签: java spring jpa spring-data-jpa querydsl

我正在获得

的例外
java.lang.ClassCastException: com.chat.dao.model.PGUserRoles cannot be cast to com.querydsl.core.Tuple

我的代码似乎是正确的。

JPAQuery<Tuple> query = new JPAQuery<Tuple>(entityManager);
QPGUserRoles pgUserRoles = QPGUserRoles.pGUserRoles;
List<Tuple> dataList = query
    .from(pgUserRoles)
    .where(isRoleName(userRolesDTO.getRoleName()),
        isRoleType(userRolesDTO.getRoleType()),
        isStatus(userRolesDTO.getStatus()),
        isStatusNotEq()
    )
    .offset(offset)
    .limit(limit)
    .orderBy(orderByRoleIdDesc())
    .fetch();
UserRolesDTO userData = null;
for (Tuple tuple : dataList) {
    userData = new UserRolesDTO();
    userData.setRoleId(tuple.get(pgUserRoles.roleId));
    userData.setRoleName(tuple.get(pgUserRoles.roleName));
    userData.setRoleType(tuple.get(pgUserRoles.roleType));
    userData.setStatus(tuple.get(pgUserRoles.status));
    userRoleList.add(userData);
}

抛出异常与for

我不明白为什么会引发异常。元组是通用查询结果投影。 After 3 clicks on the background.中的示例类似于我的示例。 我使用的是querydsl 4.2.1版本。

2 个答案:

答案 0 :(得分:0)

生成的类QPGUserRoles中的

查询将返回PGUserRoles的列表,即列表

我不知道什么是Tuple,但显然是允许的,因为方法返回List,但不从返回的参数中而是从提供的生成类中获取list的实际参数。可能是错误的设计或Java限制。

在所有情况下,您都必须更改代码。您的代码不正确,仅仅是因为它会编译:)

upd:元组是Select语句的投影。您不使用它-结果有所不同;)

答案 1 :(得分:0)

好吧,所以在修改我的代码后,在wrt v4上做了一点修改。现在正在工作。谢谢大家的支持。

public partial class Form2 : Form
{
    private Form1 form1;
    public Form2()
    {
        InitializeComponent();
    }

    private void btn_search_Click(object sender, EventArgs e)
    {
        if (rb_Artist.Checked == true)
        {
            String ConnectionString = form1.getConnectionString();
            SqlConnection con = new SqlConnection(ConnectionString);
            SqlDataAdapter sqa = new SqlDataAdapter("SELECT * FROM tblArtist where Name like" + txt_search.Text, con);
            DataTable dt = new DataTable();
            sqa.Fill(dt);
            dataGridView1.DataSource = dt;
        }
    }
}