输入“SELECT*”时没有可行的替代方案

问题描述 投票:0回答:1

我正在尝试创建一个 postgresql 查询并使用entityManger 创建查询,但在创建过程中出现错误。

引起:org.hibernate.query.sqm.ParsingException:第 1:7 行在输入“SELECT*”处没有可行的替代方案 在 org.hibernate.query.hql.internal.StandardHqlTranslator$1.syntaxError(StandardHqlTranslator.java:46)

此查询在 sql 控制台中运行良好

SELECT * FROM user_details where user_name = ? LIMIT 1 

@Component
@RequiredArgsConstructor
public class UserDaoImp implements UserDao {

    private final EntityManagerFactory entityManagerFactory;

    private static final String FIND_USER_BY_NAME =
            "SELECT * FROM user_details where user_name = ? LIMIT 1";

    @Override
    public User findUserByName(String userName) {
        TypedQuery<User> query = getEntityManager().createQuery(FIND_USER_BY_NAME, User.class);
        query.setParameter("user_name", userName);

        return query.getSingleResult();
    }

不知道我错过了什么

java postgresql spring-boot hibernate entity-framework
1个回答
0
投票

在 JPA 中使用本机 SQL 查询与 Hibernate 是导致您报告的问题的原因。使用实体和属性名称以及位置参数来纠正它。尝试这个更新的代码;

@Component
@RequiredArgsConstructor
public class UserDaoImp implements UserDao {

    private final EntityManagerFactory entityManagerFactory;

    private static final String FIND_USER_BY_NAME =
            "SELECT u FROM User u WHERE u.userName = ?1";

    @Override
    public User findUserByName(String userName) {
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        try {
            TypedQuery<User> query = entityManager.createQuery(FIND_USER_BY_NAME, User.class);
            query.setParameter(1, userName);

            return query.getSingleResult();
        } finally {
            entityManager.close();
        }
    }
}

希望它有效:)

© www.soinside.com 2019 - 2024. All rights reserved.