2016-08-15 53 views
0

我在我的應用程序中使用Hibernate @SequenceGenerator。在嘗試使用應用程序在數據庫中插入新實體時,新持久實體的ID與序列當前值相同,而不是序列的當前值乘以50.作爲allocationsize的默認值是50.您是否有任何爲什麼發生這種想法。提前致謝。休眠分配的默認值不是50

@javax.persistence.SequenceGenerator(name="SEQ_NAME", sequenceName="SEQ_NAME"") 
@Table(name="TABLE_NAME") 
public class entity{ 
    @Column(name="ID") 
    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_NAME"") 
    int id; 
+0

SEQUENCE在數據庫中定義...它在那裏設置了什麼?誰創造了SEQUENCE? –

+0

是的,序列存在於數據庫中,我可以使用這條SQL行「SELECT seq_name.nextval FROM DAUL;」來檢查它的值。問題是持久實體id值與當前序列值相同。 – Yasmin

+0

其中不回答問題... –

回答

0

你的序列看似由DBA創建的,而不是由你JPA提供商。因此,在指定allocationSizeJPA(因爲它僅用於模式/序列創建)時絕對是零點。如果你想要一個特定的allocationSize,你需要告訴你的DBA在創建SEQUENCE(通常通過像INCREMENT BY這樣的東西)來設置它。

+0

經過一番調查和搜索,我發現這個應用程序在運行時在控制檯中發生了這種交戰。 openjpa.Runtime:警告:無法緩存序列「SEQ_NAME」的序列值。您的應用程序無權運行ALTER SEQUENCE命令。確保它具有運行ALTER SEQUENCE命令的適當權限。這意味着JPA將禁用序列緩存。如果用戶執行此命令,則無權執行Alter命令。 – Yasmin

+0

另外,我通過啓用此屬性找到了解決此問題的解決方案。 ,但仍然存在與DB序列當前值相同的持久化實體ID值。 – Yasmin

+0

正如我所說的,您的DBA將SEQUENCE設置爲一個值,而不是您想要的值。 JPA提供商試圖將其更改爲您的設置,但您未授予它許可權。所以解決方案是與您的DBA交談! –