2013-05-07 2 views
0

Java EE를 처음 사용합니다.
Eclipse Juno + Eclipse Link + MySQL을 사용하고 있습니다.
현재 JPA 프로젝트와 동적 웹 프로젝트가 있습니다.
JPA 프로젝트가 웹 프로젝트의 빌드 경로에 포함되어 있습니다.
JPA 프로젝트에서 "StudentDomain"클래스를 작성하여 Student 테이블에서 행을 검색했습니다.
JPA 프로젝트에서 fine으로 작동합니다.
그러나 웹 프로젝트에서는 ID 만 반환되고 다른 필드, 이름, 성별 및 이메일은 모두 null로 반환됩니다.JPA - 기본 키만 검색되고 다른 필드가 반환됩니다.

예 :
SQL : SELECT * FROM Student;

는 JPA 프로젝트에서, 나는 다음과 같은 결과를 얻었다 :

ID Name Gender Email 
1 null null null 
2 null null null 

아래는 학생 엔티티 클래스의 소스 코드입니다

ID Name Gender Email 
1 John M  [email protected] 
2 Emma F  [email protected] 

웹 프로젝트에서를, 나는 다음과 같은 결과를 얻었다.

package model; 

import java.io.Serializable; 
import java.lang.String; 
import javax.persistence.*; 

@Entity 
public class Student implements Serializable 
{ 
    @Id 
    @Column(name = "ID") 
    private int id; 

    @Column(name = "name") 
    private String name; 

    @Column(name = "gender") 
    private String gender; 

    @Column(name = "email") 
    private String email; 

    private static final long serialVersionUID = 1L; 

    public Student() 
    { 
    } 

    public int getId() 
    { 
     return this.id; 
    } 

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

    public String getName() 
    { 
     return this.name; 
    } 

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

    public String getGender() 
    { 
     return this.gender; 
    } 

    public void setGender(String gender) 
    { 
     this.gender = gender; 
    } 

    public String getEmail() 
    { 
     return this.email; 
    } 

    public void setEmail(String email) 
    { 
     this.email = email; 
    } 

} 
+0

은 DAO 또는 엔티티 인 StudentDomain 클래스입니까? – erencan

+0

DAO 란 무엇입니까? StudentDomain은 엔티티 클래스가 아닙니다. getStudentByName(), getStudentByGender()와 같은 Student 테이블을 쿼리하는 함수를 작성하는 곳입니다. –

+0

DAO -> 데이터 액세스 개체 (http://en.wikipedia.org/wiki/Data_access_object) –

답변

2

어떤 버전을 사용하고 있습니까? 이것이 실행중인 원시 SQL 쿼리 인 경우 쿼리에서 반환 된 열 메타 데이터에서 대/소문자 구분 문제 일 수 있습니다. EclipseLink 버전에 따라 지속성 속성 "eclipselink.jpa.uppercase-column-names"를 true (EclipseLink 2.1에서 추가)로 설정하거나 기본적으로 true 인 최신 버전으로 업그레이드 할 수 있습니다.

또한 열 주석에 정의 된 대소 문자가 데이터베이스에서 반환되는 것과 일치하는지 확인하십시오. ID 열은 "ID"로 매핑되고 나머지는 모두 소문자로 매핑됩니다. 대문자 열을 반환하는 데이터베이스에 대한 문제입니다.

이것은 원시 SQL에서만 문제가됩니다. em.createQuery ("Select s from Student s")와 같은 JPQL 쿼리를 대신 사용해 볼 수도 있습니다.

+0

MySQL은 열 이름에서 대소 문자를 구별하지 않으므로 ID가 필드 이름으로 "ID"를 반환하고 "id"가 일치하는 "id"를 반환합니다. –

+0

MySQL은 문제가되지 않습니다. 자바가 있습니다. MySQL이 열 이름을 "GENDER"로 반환하면 "gender"를 사용하면 열 String을 기반으로 해시 된 반환 된 결과에서 값을 가져 오지 않습니다. 따라서 EclipseLink가 열 위치를 제어하기 때문에 JPQL이 작동하지만 반환 된 결과에서 값을 조회하는 데 열 이름을 사용해야하는 네이티브 SQL 쿼리에서 문제가 발생할 수 있습니다. 문제는 엔티티가 ID를 가지고 있지만 소문자로 정의 된 열이있는 다른 필드가 아니며 JPQL – Chris

+0

이 아닌 원시 SQL 쿼리에서만 발생하는 "select *"에 대해 언급합니다. 나는 그것을 뒤로 보았다. (나는 .NET MVC를 내 생각의 기차로 어지럽게 만든다.) 성명'SELECT ID, 이름, 성별, 이메일 FROM 학생'아마 그것을 할 것입니다.MySQL은 바인딩 셋업을 망치고있다. 왜냐하면 MySQL은 결과 셋의 데이터베이스에있는 모든 것을 기본값으로 사용하기 때문에 (그리고 컬럼은 대소 문자를 구별하지 않지만 다른 케이스의 이벤트를 가질 수있다). –

관련 문제