2011-10-03 43 views
1

我正在使用GAE和GWT嘗試創建網站,並且試圖首次將JDO用作db。當我將對象添加到數據庫時,我沒有收到任何錯誤,但是,當我嘗試檢索這些相同的對象時,我只檢索了一個未被證實的空對象。所以,如果我嘗試創建一個對象User並根據用戶電子郵件存儲它,那麼當我嘗試檢索同一個用戶時(基於它的電子郵件),我會得到一個用戶對象,其所有字段都設置爲null。JDO持久字段返回null

JDO管理器類:

package com.sixpac.website.server; 

import java.util.ArrayList; 
import java.util.LinkedHashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.Collections; 

import javax.jdo.JDOHelper; 
import javax.jdo.PersistenceManager; 
import javax.jdo.PersistenceManagerFactory; 

import com.sixpac.website.client.User; 

public class UserManager implements UserInterface 
{ 
    private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional") ; 

    /** 
    * create and return an instance of the persistence manager 
    * @return 
    */ 
    public static PersistenceManagerFactory getPersistenceManagerFactory() 
    { 
     return pmfInstance ; 
    } 


    public void addUser(User user) 
    { 
     PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager() ; 

     System.out.println("in addUser manager: " + user.getEmail() + ":" + user.getPassword() + ":" + user.getFName() + ":" + user.getLName()) ; 

     try 
     { 
      pm.currentTransaction().begin() ; 
      pm.makePersistent(user) ; 
      pm.currentTransaction().commit() ; 
     } 
     catch(Exception e) 
     { 
      pm.currentTransaction().rollback() ; 
      System.out.println("addUser: " + e) ; 
//   throw new RuntimeException(e) ; 
     } 
     finally 
     { 
      pm.close() ; 
     } 
    } 

    public void removeUser(String email) 
    { 
     PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager() ; 

     User user ; 

     try 
     { 
      pm.currentTransaction().begin() ; 
      user = pm.getObjectById(User.class, email) ; 
      pm.deletePersistent(user) ; 
      pm.currentTransaction().commit() ; 
     } 
     catch(Exception e) 
     { 
      pm.currentTransaction().rollback() ; 
      System.out.println("removeUser: " + e) ; 
//   throw new RuntimeException(e) ; 
     } 
     finally 
     { 
      pm.close() ; 
     } 
    } 

    public void updateUser(String email, int state) 
    { 
     PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager() ; 

     User user ; 

     try 
     { 
      pm.currentTransaction().begin() ; 
      user = pm.getObjectById(User.class, email) ; 
      user.setState(state) ; 

      pm.makePersistent(user) ; 
      pm.currentTransaction().commit() ; 
     } 
     catch(Exception e) 
     { 
      pm.currentTransaction().rollback() ; 
      System.out.println("updateUser: " + e) ; 
//   throw new RuntimeException(e) ; 
     } 
     finally 
     { 
      pm.close() ; 
     } 
    } 

    public User getUser(String email) 
    { 
     PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager() ; 

     System.out.println("in getUser manager: " + email) ; 

     User user = new User() ; 
     try 
     { 
      pm.currentTransaction().begin() ; 
      user = pm.getObjectById(User.class, email) ; 
      pm.currentTransaction().commit() ; 
     } 
     catch(Exception e) 
     { 
      pm.currentTransaction().rollback() ; 
//   throw new RuntimeException(e) ; 
     } 
     finally 
     { 
      pm.close() ; 
     } 

     return user ; 
    } 

    public List<User> listUser() 
    { 
     PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager() ; 
     String query = "select from " + User.class.getName() ; 
     return (List<User>) pm.newQuery(query).execute() ; 
    } 
} 

用戶類,它實現Serializable:

package com.sixpac.website.client; 

import java.io.Serializable; 
import javax.jdo.annotations.IdGeneratorStrategy; 
import javax.jdo.annotations.IdentityType; 
import javax.jdo.annotations.PersistenceCapable; 
import javax.jdo.annotations.Persistent; 
import javax.jdo.annotations.PrimaryKey; 

@PersistenceCapable(identityType = IdentityType.APPLICATION) 
public class User implements Serializable 
{ 
    private static final long ID = 1L ; 

    @PrimaryKey 
    @Persistent 
    private String email ; 
    @Persistent 
    private String fname ; 
    @Persistent 
    private String lname ; 
    @Persistent 
    private String psswrd ; 
    @Persistent 
    private String inst ; 
    @Persistent 
    private String details ; 
    @Persistent 
    private int state ; 

    public User() 
    { 
     email = null ; 
     fname = null ; 
     lname = null ; 
     psswrd = null ; 
     inst = null ; 
     details = null ; 
     state = 0 ; 
    } 

    public User(String email, String psswrd, String fname, String lname, String inst, String details) 
    { 
     this.psswrd = psswrd ; 
     this.fname = fname ; 
     this.lname = lname ; 
     this.email = email ; 
     this.inst = inst ; 
     this.details = details ; 
     state = 0 ; 
    } 

    public String getFName() 
    { 
     return fname ; 
    } 
    public void setFName(String fname) 
    { 
     this.fname = fname ; 
    } 

    public String getLName() 
    { 
     return lname ; 
    } 
    public void setLName(String lname) 
    { 
     this.lname = lname ; 
    } 

    public String getPassword() 
    { 
     return psswrd ; 
    } 
    public void setPassword(String psswrd) 
    { 
     this.psswrd = psswrd ; 
    } 

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

    public String getInstetute() 
    { 
     return inst ; 
    } 
    public void setInstetute(String inst) 
    { 
     this.inst = inst ; 
    } 

    public String getDetails() 
    { 
     return details ; 
    } 
    public void setDetails(String details) 
    { 
     this.details = details ; 
    } 

    public int getState() 
    { 
     return state ; 
    } 
    public void setState(int state) 
    { 
     this.state = state ; 
    } 
} 

什麼我做錯了,將不勝感激的任何想法!

謝謝!

+0

我已經跑了你的代碼在我的環境沒有任何修飾,事實證明了你所提到的功能(添加/查詢)工作正常。你的問題發生在生產還是本地?你檢查了你的數據存儲是否存儲值?請澄清。 –

回答