我正在尝试创建一个 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();
}
不知道我错过了什么
在 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();
}
}
}
希望它有效:)