2014-03-05 31 views
0

我有如下所示的實體類「用戶」,但它沒有生成主鍵。我在我的應用程序引擎應用程序中使用JPA,並在我的Android客戶端中使用應用程序引擎端點。使用應用程序引擎Java的JPA中不生成主鍵

Enitty類:

@Entity 
public class UserMaster { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long userId; 

    private String userName; 
    private String fullName; 
    private String userAvtarUrl; 
    private String userAbout; 
    private String userGender; 


    public String getUserName() { 
     return userName; 
    } 

    public Long getUserId() { 
     return userId; 
    } 

    public void setUserId(Long userId) { 
     this.userId = userId; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public String getFullName() { 
     return fullName; 
    } 

    public void setFullName(String fullName) { 
     this.fullName = fullName; 
    } 

    public String getUserAvtarUrl() { 
     return userAvtarUrl; 
    } 

    public void setUserAvtarUrl(String userAvtarUrl) { 
     this.userAvtarUrl = userAvtarUrl; 
    } 

    public String getUserAbout() { 
     return userAbout; 
    } 

    public void setUserAbout(String userAbout) { 
     this.userAbout = userAbout; 
    } 

    public String getUserGender() { 
     return userGender; 
    } 

    public void setUserGender(String userGender) { 
     this.userGender = userGender; 
    } 
} 

端點持久性代碼:

​​

Android客戶端

Userendpoint.Builder builder = new Userendpoint.Builder(
         AndroidHttp.newCompatibleTransport(), 
         new JacksonFactory(), new HttpRequestInitializer() { 
          public void initialize(HttpRequest httpRequest) { 
          } 
         }); 

       Userendpoint endpoint = CloudEndpointUtils.updateBuilder(
         builder).build(); 

       User objUser = new User(); 

       objUser.setUserName(txtName.getText().toString()); 
       objUser.setUserEmail(txtEmail.getText().toString()); 

       Bitmap bmp = BitmapFactory.decodeFile(imagePath); 
       ByteArrayOutputStream out = new ByteArrayOutputStream(); 
       bmp.compress(Bitmap.CompressFormat.PNG, 100, out); 
       byte[] imgByte = out.toByteArray(); 
       String encodedImage = Base64.encodeToString(imgByte, 
         Base64.DEFAULT); 
       objUser.setImage(encodedImage); 

       User result = endpoint.insertUser(objUser).execute(); 

請指引,我欠缺的我。謝謝。

回答

0

可能是您的數據庫服務器不提供自動生成代碼。

IDENTITY

  • IDENTITY,它依賴於自動生成數據庫。
  • 某些數據庫服務器像,MySQLMicrosoft SQL Server在插入過程中爲主鍵字段提供ID代。

常用的方法是使用IdGeneratorStrategy.TABLE。它不依賴於DB。

+0

我正在使用谷歌應用程序引擎數據存儲。 – zanky

2

如果使用JPA和GAE/Datastore,請使用所有JPA批註,或者全部作爲供應商擴展使用所有JDO批註。你不能混合搭配。

+0

是的,你是對的。我正在混合JPA和JDO,但現在我只是使用JPA,但也不工作。我編輯了我的代碼。 – zanky

+0

但「不工作」並沒有真正告訴我們很多。日誌會告訴你很多關於發送到數據存儲的內容(並且你也沒有提供實際的JPA持久性代碼)。持久對象後有一個id(無論是0還是其他值),並且可以打印出來。但是,當調試LOG應該是你的第一個呼叫點 – DataNucleus

+0

如果我不設置'userId',那麼它不會在數據庫中插入記錄,我不想以編程方式設置我的ID。我希望它應該自動生成。我已經發布了我從Android客戶端使用的實體持久代碼。 – zanky

-1

在我的情況的問題是在方法「containsUserMaster(usermaster)」 方法支票的方式存在這樣的:

UserMaster item = mgr.find(UserMaster.class, userId); 

的問題,直到添加操作無法完成,用戶id將是空的,因爲程序停止與NullPointerExeption .. 我添加userId checkinq爲空 - 這就解決了問題

相關問題