2017-05-17 6 views
0

에 대한 DB에서 특정 colums을 PIN이 어떻게 내 웹 페이지 나 활성 주제의 이름 목록을 표시해야합니다 열 기본 쿼리 - 내 DB에서 엔티티

id (long) 
name (String) 
ifActive (0 or 1) 
text (very long String) 

있는 테이블 제목 본당.

<sql-result-set-mapping name="SubjectResult"> 
    <entity-result entity-class="com.test.Subject"> 
     <field-result name="id" column="id"/> 
     <field-result name="name" column="name"/> 
     <field-result name="ifActive" column="ifActive"/> 
     <field-result name="text" column="text"/> 
    </entity-result> 
</sql-result-set-mapping> 

<entity class= "com.test.Subject" name= "Subject"> 
    <named-native-query name="findAllActiveSubject" 
         result-set-mapping="SubjectResult"> 
     <query> 
      select 
       * 
      from 
       Subject 
      where 
       ifActive = 1 
     </query> 
    </named-native-query> 
</entity> 

을 그리고 그것을 잘 작동합니다 - 나는 주제 객체의 목록을 나는 활성 주제의 이름 목록을 형성 할 수있다 : 그래서 XML 파일에 다음과 같은 기본 쿼리를 선언합니다. 그러나 이것은 문제입니다. 텍스트 열의 텍스트가 너무 길어서 실제로 활성 주제 제목 목록을 만들기 위해 DB에서 다시 검색 할 필요가 없습니다. 주제 제목 만 필요합니다.

그래서 내가 다음에 SQL 쿼리를 변경합니다

<sql-result-set-mapping name="SubjectResult"> 
    <entity-result entity-class="com.test.Subject"> 
     <field-result name="id" column="id"/> 
     <field-result name="name" column="name"/> 
     <field-result name="ifActive" column="ifActive"/> 
     <field-result name="text" column="text"/> 
    </entity-result> 
</sql-result-set-mapping> 

<entity class= "com.test.Subject" name= "Subject"> 
    <named-native-query name="findAllActiveSubject" 
         result-set-mapping="SubjectResult"> 
     <query> 
      select 
       name 
      from 
       Subject 
      where 
       ifActive = 1 
     </query> 
    </named-native-query> 
</entity> 

내가 할

com.microsoft.sqlserver.jdbc.SQLServerException: The column name id is not valid 

그래서 내가 다음에 결과 집합 변경하려고 근본 원인과 예외

org.hibernate.exception.GenericJDBCException: could not execute query 

:

<sql-result-set-mapping name="SubjectResult"> 
    <entity-result entity-class="com.test.Subject"> 
     <field-result name="name" column="name"/> 
    </entity-result> 
</sql-result-set-mapping> 

<entity class= "com.test.Subject" name= "Subject"> 
    <named-native-query name="findAllActiveSubject" 
         result-set-mapping="SubjectResult"> 
     <query> 
      select 
       name 
      from 
       Subject 
      where 
       ifActive = 1 
     </query> 
    </named-native-query> 
</entity> 

그리고 나는 아주 이상한 근본 원인

com.microsoft.sqlserver.jdbc.SQLServerException: The column name id1_5_0_ is not valid 

그래서 ..와 예외

org.hibernate.exception.GenericJDBCException: could not execute query 

얻을

내가 DB에서 colums의 몇 가지를 가져 오지 수 없으며 형태 주제 만 그들과 함께? Subject의 나머지 속성이 null이더라도 괜찮습니다. Subject 또는 Value 목록이나 그와 같은 배열 목록이 아닌 정확한 작업을 원합니다.

답변

0

당신은 선택의 쿼리해야 Subject.java

... 
public Subject() { 
} 

public Subject(String name) { 
    this.name = name; 
} 
... 

에 작성

HQL

아 파크 생성자를 특정 생성자를 사용할 수

select new Subject(s.name) from Subject s where s.ifActive=1