【问题标题】:Hibernate query with join: QuerySyntaxException: unexpected token带有连接的休眠查询:QuerySyntaxException:意外令牌
【发布时间】:2015-03-15 15:28:55
【问题描述】:

我想使用 join 进行查询,我测试过但我有这个错误

org.hibernate.hql.ast.QuerySyntaxException: 意外令牌..

我做到了:

public List <Card>getCard(Client c) {
        ClientDAO cd = new ClientDAO();
        List<Card> ca = getSessionFactory().getCurrentSession().createQuery("select ca.column1,e.column2 from card ca join ens e on ca.ide=e.ide where ca.idclient="+ cd.getClient(c).getIdclient()).list();//this is a method to get the current client
        return ca;

【问题讨论】:

    标签: java database hibernate join orm


    【解决方案1】:

    您使用 SQL 语法编写了 HQL 查询。如果Card 实体具有ens 关联,您可以编写如下查询:

    List<Card> ca = getSessionFactory().getCurrentSession()
        .createQuery(
            "select ca " +
                    "from Card ca " +
                    "join fetch ca.ens " +
                    "where ca.idclient = :idclient")
            .setParameter("idclient", cd.getClient(c).getIdclient())
            .list();
        return ca;
    }
    

    如果你想要一个 SQL 查询,因为你有一个投影,你会写一个原生查询来代替:

    List<Object[]> ca = getSessionFactory().getCurrentSession()
        .createSQLQuery(
            "select ca.column1, e.column2 " +
            "from card ca " +
            "join ens e on ca.ide=e.ide " +
            "where ca.idclient = :idclient")
        .setParameter("idclient", cd.getClient(c).getIdclient())
    .list();
    

    在这种情况下,您会得到 ListObject[]。每个Object[] 与选定的行相关联,每个数组元素是一个列值。

    【讨论】:

    • 你知道这个错误的原因吗:线程“main”中的异常org.hibernate.MappingException:没有JDBC类型的方言映射:-1
    • 请用 HQL 写这个
    • 我已经给你一个 HQL 查询。对于缺少的方言,您肯定会找到另一个 SO 答案。
    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 2013-01-19
    • 2017-04-17
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多