2014-11-13 2 views
0

쿼리가 있습니다. 그러나 그것은 효과가 없습니다. Oracle SQL Developer에서 테스트 해 보았습니다. 그래서 나는 namedquery에 그것을 썼다. 즉 오라클 SQL 개발자프로젝트를 배포 할 수 없습니다. 원인 : 명명 된 쿼리의 오류입니다.

SELECT q.* FROM TAKE_EXAM_QUESTION q 
    INNER JOIN TAKE_EXAM e 
    on q.tk_exam_id = e.tk_exam_id 
    where e.user_id= :userId; 

에 잘 작동 그리고 내가 지금 작업하는 날을 제안 해주십시오 이유

@NamedQuery(name = "TakeExamQuestionEntity.question", query = "SELECT qs FROM   TakeExamQuestionEntity qs INNER JOIN TakeExamEntity ex on qs.tk_exam_id = ex.tk_exam_id where ex.user_id= :userId "), 

그러나이 작동하지 않습니다, 나는 모르는 Entity 클래스에서 쿼리 이상 입력 아래 쿼리입니다 .

답변

0

테이블에서 엔티티를 생성하면 테이블의 모든 필드는 _ 뒤에 _가되고 첫 번째 문자는 _ 뒤에옵니다. 따라서 아래 예제와 같이 NamedQuery를 작성해야한다.

@NamedQuery(name = "TakeExamQuestionEntity.question", 
      query = "SELECT qs FROM TakeExamQuestionEntity qs 
        INNER JOIN TakeExamEntity ex on qs.tkExamId = ex.tkExamId 
        where ex.userId= :userId ") 

작동하지 않는 경우 두 클래스 (엔터티 기본 키 및 엔터티 클래스)로 구분되는 엔터티를 확인해야합니다.

@Embeddable 
public class EmployeePK implements Serializable { 
    private String name; 
    private long id; 

    public EmployeePK() { 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public int hashCode() { 
     return (int) name.hashCode() + id; 
    } 

    public boolean equals(Object obj) { 
     if (obj == this) return true; 
     if (!(obj instanceof EmployeePK)) return false; 
     if (obj == null) return false; 
     EmployeePK pk = (EmployeePK) obj; 
     return pk.id == id && pk.name.equals(name); 
    } 
} 


@Entity 
public class Employee implements Serializable { 
    EmployeePK primaryKey; 

    public Employee() { 
    } 

    @EmbeddedId 
    public EmployeePK getPrimaryKey() { 
     return primaryKey; 
    } 

    public void setPrimaryKey(EmployeePK pk) { 
     primaryKey = pk; 
    } 

    ... 
} 

위의 예와 같이 생성 한 항목이 2 개 클래스 인 경우. 당신은

SELECT e FROM Employee e 
where e.primaryKey.name=:name 

는 기본 키가 주석 포함 가능한을 가지고 EmployeePK의 대상이 될 것입니다 정의해야합니다.

네이티브 쿼리를 사용하려면 @NamedQuery 대신 @NamedNativeQuery를 사용해야합니다.

은 참조 : NamedNativeQuery

관련 문제