簡體   English   中英

休眠注釋-ID設置不正確

[英]Hibernate Annotations - id is not set correctly

我有一堆用JPA這樣注釋的Java Bean:

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,Hibernate3

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

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

為什么?

我不知道,關於某些“實際ID”的上一段沒有任何意義。 你能澄清一下嗎? 顯示TitleEntry表的結構也可能會有所幫助。

反正hibernate_sequence是什么(在Hibernate網站上找不到合適的解釋)?

Hibernate使用的序列或表的默認名稱(請參見5.1.5。增強標識符生成器 )。 由於SQL Server不支持序列,因此我敢打賭。 您應該檢查生成的DDL以查找已完成的操作(並顯示相關部分)。

但是令我驚訝的是,Hibernate沒有默認使用IDENTITY (您使用的是哪個版本的Hibernate?)。

我該如何解決?

我不知道您要解決的問題,但如果要完全控制,請不要使用AUTO策略( IDENTITY在SQL Server中很常見)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM