У меня есть класс класса User
@Entity(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(unique = true, nullable = false)
private String email;
/** skipped **/
И класс EJB DAO без гражданства (я использую jpa/hibernate) с методом
@Override
public User findByEmail(String name) {
TypedQuery<User> query = entityManager.createQuery("from User where email= :email", User.class);
query.setParameter("email", name);
return query.getSingleResult();
}
Когда я выполняю этот метод со страницы (используя jsf), он отлично работает. Проблема возникает, когда я запускаю этот метод из компонента WebService EJB. У меня есть следующее исключение
org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [from User where email= :email]
Мой веб-сервис очень прост:
@Stateless(name = "webServiceBean")
@WebService(serviceName = "webService")
public class MyWebService{
@EJB
private UserDao dao;
public String findUser(String email) {
return dao.findByEmail(email);
}
}
Приложение развернуто на JBoss7. Я использую EJB 3.1 и hibernate 4.3. Кто-нибудь знает, в чем причина этого исключения? И почему это происходит только в WebService?
User
, вместе с именем пакета, указан в файле конфигурации hibernate.@Entity
или @Entity(name = "User")
. Вы назвали свою сущность как user
но в своем запросе пытаетесь ссылаться на нее как на User
. Проверьте документы для @Entity
name
@Entity
.
public abstract java.lang.String name
(Необязательно) Имя объекта. По умолчанию используется неквалифицированное имя класса сущности. Это имя используется для обозначения объекта в запросах. Имя не должно быть зарезервированным литералом на языке запросов Java Persistence.