Java Hibernate查询与联接:QuerySyntaxException:意外标记

Java Hibernate查询与联接:QuerySyntaxException:意外标记,java,database,hibernate,join,orm,Java,Database,Hibernate,Join,Orm,我想使用join进行查询,我对其进行了测试,但出现了此错误 org.hibernate.hql.ast.QuerySyntaxException:意外令牌 我做到了: public List <Card>getCard(Client c) { ClientDAO cd = new ClientDAO(); List<Card> ca = getSessionFactory().getCurrentSession().createQuery(

我想使用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;
公共列表获取卡(客户端c){
ClientDAO cd=newclientdao();
List ca=getSessionFactory().getCurrentSession().createQuery(“从卡ca中选择ca.column1,e.column2在ca.ide=e.ide上连接e.ide,其中ca.idclient=“+cd.getClient(c.getIdclient()))。List();//这是获取当前客户端的方法
返回ca;

您使用了SQL语法来编写HQL查询。如果
实体具有
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;
}
List ca=getSessionFactory().getCurrentSession()
.createQuery(
“选择ca”+
“来自卡ca”+
“加入获取ca.ens”+
“其中ca.idclient=:idclient”)
.setParameter(“idclient”,cd.getClient(c.getIdclient())
.list();
返回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();
List ca=getSessionFactory().getCurrentSession()
.createSQLQuery(
选择ca.column1,e.column2+
“来自卡ca”+
“在ca.ide=e.ide上连接e”+
“其中ca.idclient=:idclient”)
.setParameter(“idclient”,cd.getClient(c.getIdclient())
.list();

在这种情况下,您将得到
对象[]
列表。每个
对象[]
都与选定的行相关联,每个数组元素都是一个列值。

您知道此错误的原因吗:线程“main”org.hibernate.MappingException中的异常:JDBC类型没有方言映射:-1如何使用HQL编写此错误我已经为您提供了一个HQL查询。对于缺少的方言,你肯定会找到另一个答案。