2013-03-20 54 views
0

我有这个Java对象,我想用它来显示来自数据库的数据。JPA空对象

public TData td; 

    public class TData { 

     private long id; 
     private String key; 
     private String language; 
     private String translation; 

     public TData() { 
     }; 

     public TData(long id, String key, String language, String translation) { 
      // super(); 
      this.id = id; 
      this.key = key; 
      this.language = language; 
      this.translation = translation; 
     } 

     public long getId() { 
      return id; 
     } 

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

     public String getKey() { 
      return key; 
     } 

     public void setKey(String key) { 
      this.key = key; 
     } 

     public String getLanguage() { 
      return language; 
     } 

     public void setLanguage(String language) { 
      this.language = language; 
     } 

     public String getTranslation() { 
      return translation; 
     } 

     public void setTranslation(String translation) { 
      this.translation = translation; 
     } 

    } 

    public TData getDataObj() { 
     return td; 
    } 

这就是我要用来获取数据的数据库表:

CREATE TABLE translations (
id SERIAL NOT NULL, 
KEY VARCHAR(255), 
LANGUAGE VARCHAR(255), 
TRANSLATION VARCHAR(255) 
) 

我有一个是用来做查询,自定义JPA对象:

@PostConstruct 
    public void loadData() { 

     td = new TData(); 

     String query = "SELECT c FROM Translations c WHERE c.Id = '70'"; 
     //String query = "SELECT p from translations p where id=70"; 
     td = (TData) dao.jpqlQuerySingle(query); 

    } 

当我打开Java对象为空的JSF页面。 Java方法jpqlQuerySingle用于返回结果作为对象,但由于某种原因,我得到空的对象。你能帮我解决这个问题吗?

回答

2

您正在比较一个字符串与长。这给你零结果。试试这个:

SELECT c FROM Translations c WHERE c.Id = 70 
0

除了Tamplar的回答(比较长的字符串):你应该使用对象包装你@Id左右,即一个Long对象,而不是long原始数据类型。

这样做的原因:总之,long不能null,并检查最常见,最简单的方法,如果持久化对象保存/拆卸或新是检查@Id是否null