2010-10-19 64 views
0

我有註解這樣與JPA的Java bean的一大堆:Hibernate註解 - ID設置不正確

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

@Entity 
public class TitleEntry extends Entry { 
    private Long id; 

    public TitleEntry() { } 

    public TitleEntry(String code, String label) { 
     super(code, label); 
    } 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public Long getId() { 
     return id; 
    } 

    protected void setId(Long id) { 
     this.id = id; 
    } 
} 

的ID始終是這樣產生的每一個對象,似乎是工作的罰款。

現在的問題: 當我保存在Java中的對象:

dao.save(titleEntry); 

的bean的id屬性設置爲INT-值,即不符合實際ID。 它對應於hibernate_sequence(我認爲)。

問題:

  1. 爲什麼?
  2. 無論如何hibernate_sequence是什麼(在Hibernate網站上找不到像樣的解釋)?
  3. 我該如何解決?

注:我使用的Java 1.6,MSSQL2005下,Hibernate

+0

什麼是「實際ID」。 ? – Bozho 2010-10-19 12:40:33

回答

1

嘗試使用相應的註釋來指定SequenceGenerator:

@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE) 
@SequenceGenerator(name = "myGen", sequenceName = "MY_SEQUENCE") 
public Long getId() 
{ 
    return id; 
} 
1

爲什麼?

我不知道,對一些「實際ID爲」不作任何意義上一段。你能澄清嗎?顯示您的TitleEntry表的結構可能也有幫助。

什麼是hibernate_sequence反正(在Hibernate網站上找不到像樣的解釋)?

Hibernate使用的序列或表的默認名稱(請參閱5.1.5. Enhanced identifier generators)。鑑於SQL Server不支持順序,我會在後面打賭。您應該檢查生成的DDL以查找完成的操作(並顯示相關部分)。

但是我很驚訝Hibernate沒有默認爲IDENTITY(你準備使用哪個版本的Hibernate?)。

我該如何解決?

我不知道你想解決什麼,但如果你想完全控制,不使用AUTO策略(IDENTITY,通常與SQL Server)。