2014-07-01 435 views
0

我會盡量告訴你我所有的問題,而不會顯示太多的代碼。我使用DropWizard,我試圖讓一個如何使用我的MySQL數據庫休眠和持久性。註釋錯誤

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private long id; 

@Column(name = "mobile", nullable = false) 
private String mobile; 

使用休眠在上述例子中,我有一個變量命名的ID和其他移動掛起。 ID用@Id註釋。我需要知道的是如何以正確的方式對移動設備進行註釋,以便我可以使用可以正常使用id的功能。

public Optional<Device> findById(Long id) { 
    return Optional.fromNullable(get(id)); 
} 

這就是我用ID查找功能。但是我不能爲移動設備使用類似的功能。我會得到一個異常拋出告訴我,除了很長的一個函數,但得到一個字符串。 所以我的猜測是我註釋了移動錯誤。但我不知道我應該嘗試什麼。

添加一些更多的信息

public Optional<Device> findByMobile(String mobile) { 
     return Optional.fromNullable(get(mobile)); 
    } 

這是我想工作的功能。但我收到以下例外情況:

org.hibernate.TypeMismatchException:爲類com.mobiles.core.Device提供了錯誤類型的ID。預計:類java.lang.Long,得到類java.lang.String

+0

你的問題是因爲移動是一個字符串類型,你想要使用的方法接收一個長類型,所以你可以改變字符串爲長期移動屬性或重載你的方法與字符串類型 –

+0

嗯更清晰。 Mobile有自己的重載函數,它看起來類似於findByID,但帶有一個String。但是我從該函數得到一個異常,因爲它試圖獲取長變量並將其放入字符串中。 –

回答

0

好吧,問題是,休眠方法得到的實體的ID(see the api),在你的情況下,ID是長型,這就是該方法拋出異常的原因。因此,您無法使用移動屬性獲得的方法

您可以使用hql或條件來加載使用屬性mobile作爲過濾器的實體。