2010-10-27 35 views
0

我有一個類,它映射到一個表使用自動遞增的休眠符號。當我設置值並將其更新到數據庫並且我在表中獲得正確的更新值時,此類正常工作。休眠auto_increment getter/setter

但問題是,當我創建這個類的新對象,並試圖獲得id,它返回一個0而不是auto_incremented id。

類的代碼是

@Entity(name="babies") 
public class Baby implements DBHelper{ 

private int babyID; 


@Id 
@Column(name="babyID", unique=true, nullable= false) 
@GeneratedValue(strategy = GenerationType.AUTO) 
public int getBabyID() { 
    return babyID; 
} 
public void setBabyID(int babyID) { 
    this.babyID = babyID; 
} 
} 

我用它來獲得持續的價值是

寶貝寶貝=新寶貝()的代碼; System.out.println(「BABY ID =」+ baby.getBabyID());

這將返回我

BABY ID = 0 

任何指針將不勝感激。

謝謝, 薩那。

回答

2

Hibernate只在實體變爲持久性後纔會生成id,即在將其保存到數據庫後。在此之前,物體處於瞬態狀態。這裏有一篇關於Hibernate對象狀態的文章,並且lifecycle

+0

sheesh!無論如何要解決而不使用SQL來從tbale獲得最大內容? – Sana 2010-10-27 16:09:56

+0

使用標準和預測您可以輕鬆地做到這一點。 DetachedCriteria.forClass(Baby.class)。新增(setProjection(Property.forName( 「babyID」)MAX()); – 2010-10-27 16:43:32

1

當對象被保存並變爲可持久化時,ID由hibernate設置。

註釋只是通知hibernate,他應​​該如何處理註釋引用的類,屬性和方法。

另一件事,如果你有當前的ID值如何休眠,將能夠認識到,他應該插入或只更新該值。

所以這是正常的預期行爲。