【问题标题】:expecting IDENT, found '*' near line 1 [duplicate]期待 IDENT,在第 1 行附近找到“*”[重复]
【发布时间】:2019-08-12 04:57:55
【问题描述】:

我想用 INNER JOIN 实现 JPA 查询。我试过这个:

@Override
    public Optional<PaymentTransactions> paymentTransactionByWpfPaymentId(Integer id) {
        String hql = "SELECT t.* FROM " + PaymentTransactions.class.getName() + " t " 
                + " INNER JOIN " + WpfPaymentPaymentTransactions.class.getName() + " wppt "
                + " ON t.id = wppt.payment_transaction_id " 
                + " WHERE wppt.wpf_payment_id = :id "
                + " ORDER BY t.id ASC LIMIT 1";
        TypedQuery<PaymentTransactions> query = entityManager.createQuery(hql, PaymentTransactions.class).setParameter("id", id);
        List<PaymentTransactions> wpfPayments = query.getResultList();
        return wpfPayments.isEmpty() ? Optional.empty() : Optional.of(wpfPayments.get(0));
    }

但是当我运行代码时出现这个错误:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting IDENT, found '*' near line 1, column 10 [SELECT t.* FROM org.datalis.plugin.entity.PaymentTransactions t  INNER JOIN org.datalis.plugin.entity.WpfPaymentPaymentTransactions wppt  ON t.id = wppt.payment_transaction_id  WHERE wppt.wpf_payment_id = :id  ORDER BY t.id ASC LIMIT 1]

你知道我该如何解决这个问题以及导致它的原因吗?

可能我需要实现 Spring Repository 并进行原生查询?

【问题讨论】:

    标签: java jpa jpa-2.0


    【解决方案1】:

    t.* 替换为t

    您希望返回 PaymentTransactions 对象,而不是其字段的值。

    另外HQL不是SQL,不支持*

    【讨论】:

    • 我如何得到message: "org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: LIMIT near line 1, column 227 [SELECT t FROM org.datalis.plugin.entity.PaymentTransactions t INNER JOIN org.datalis.plugin.entity.WpfPaymentPaymentTransactions wppt ON t.id = wppt.payment_transaction_id WHERE wppt.wpf_payment_id = :id ORDER BY t.id ASC LIMIT 1]"
    猜你喜欢
    • 2019-04-25
    • 2021-06-16
    • 2019-12-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2023-02-13
    • 2016-02-21
    • 2017-11-19
    相关资源
    最近更新 更多