I'm trying to create a postgresql query and Use entityManger to create the query, but got errors during the creation.
Caused by: org.hibernate.query.sqm.ParsingException: line 1:7 no viable alternative at input 'SELECT*' at org.hibernate.query.hql.internal.StandardHqlTranslator$1.syntaxError(StandardHqlTranslator.java:46)
This query works fine from sql console
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();
}
Not sure where i missed
The use of a native SQL query in JPA with Hibernate is the cause of the issue you reported. Use entity and attribute names along with positional parameters to correct it. Try this updated code;
@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();
}
}
}
Hope it Works :)