2013-05-07 79 views
0

我是Java EE的新手。
我正在使用Eclipse Juno + Eclipse Link + MySQL。
目前我有一個JPA項目和一個動態web項目。
JPA項目包含在Web項目的構建路徑中。
我在JPA項目中創建了一個「StudentDomain」類來從Student表中檢索行。
它在JPA項目中的工作罰款
但在web項目中,只返回ID,其他字段,名稱,性別和電子郵件都返回null。JPA - 僅檢索主鍵,其他字段返回null

例如:
SQL:SELECT * FROM Student;

在JPA項目,我得到了以下結果:

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

在Web項目,我得到了以下結果:

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

下面是學生實體類的源代碼。

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 2013-05-07 08:10:30

+0

什麼是DAO? StudentDomain不是實體類。這是我寫函數來查詢Student表,如getStudentByName(),getStudentByGender()。 – 2013-05-07 12:44:14

+0

DAO - >數據訪問對象(http://en.wikipedia.org/wiki/Data_access_object) – 2013-05-07 13:28:25

回答

2

您使用的是哪個版本?如果這是您正在執行的本機SQL查詢,那麼對查詢返回的列元數據可能是區分大小寫的問題。根據EclipseLink版本,您可以嘗試將持久性屬性「eclipselink.jpa.uppercase-column-names」設置爲true(在EclipseLink 2.1中添加),或者升級到默認情況下爲true的最新版本。

您也可以嘗試確保列註釋中定義的字段與數據庫返回的內容匹配 - ID列映射爲「ID」,而其他列都是小寫,可能是數據庫默認情況下返回大寫字母列的問題。

這隻會是原生SQL的問題。您也可以嘗試使用JPQL查詢,例如em.createQuery(「從學生中選擇s」)。

+0

MySQL對列名不是那麼挑剔,所以不應該是這樣,ID會返回「ID」作爲字段名稱,而「id」會返回匹配的「id」。 – 2013-05-07 14:53:56

+0

MySQL不是問題,Java是。如果MySQL將列名稱返回爲「GENDER」,那麼使用「gender」將不會從返回的結果中獲取基於列String進行散列處理的值。這就是JPQL可能工作的原因,因爲EclipseLink控制列位置,但在原生SQL查詢中必須使用列名稱來查找返回結果中的值時,存在大小寫問題。問題是實體具有ID,但不包含其他字段的小寫字母,並且他提到「select *」,它只發生在原生SQL查詢中,而不是JPQL – Chris 2013-05-07 16:04:10

+0

我完全同意。我正在向後看(我責怪.NET MVC搞亂我的思路)。聲明「SELECT ID,姓名,性別,來自學生的電子郵件」可能會這樣做。這是*搞砸了綁定,因爲MySQL默認使用結果集上的數據庫中的任何數據(並且列可以具有不同的事件,儘管它們不區分大小寫)。 – 2013-05-07 17:11:03