2014-04-29 2 views
1

를 매핑되지 않은 엔티티 클래스 사용자EJB의 웹 서비스는 기업 내가 가진 오류

@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를 사용하여 최대 절전 모드입니다)

@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 bean에서이 메소드를 실행하면 문제가 발생합니다. 나는 다음과 같은 예외에게있어

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과 최대 절전 모드 4.3을 사용하고있다. 아무도이 예외의 이유를 알고 있는가? 왜 WebService에서만 발생합니까?

답변

1
  1. 패키지 이름과 함께 User이 최대 절전 모드 구성 파일에 나열되어 있는지 확인하십시오.
  2. @Entity 또는 @Entity(name = "User") 만 사용하십시오. 엔티티의 이름을 user으로 지정했으나 쿼리에서 User으로 지정하려고했습니다.

@Entityname 속성의 docs을 확인합니다.

공공 추상적 인 java.lang.String의 이름

(선택 사항) 엔티티 이름. 기본값은 엔티티 클래스의 규정되지 않은 이름입니다. 이 이름은 쿼리에서 엔터티를 참조하는 데 사용됩니다. 이름은 Java Persistence 쿼리 언어의 예약 된 리터럴이 아니어야합니다.

+0

쿼리 고정 문제에서 사용자를 소문자로 변경. 감사. –

+0

당신은 오신 것을 환영합니다. –