2011-04-04 76 views
0

我想要一個具有AUTO IdGeneration策略的實體,我需要它在Oracle和MySQL上都可以工作,並且我需要在Oracle的情況下爲每個實例指定序列名稱。JPA IdGeneration strategy AUTO

當我註釋主鍵:

@Id 
@Column(name="id") 
@GeneratedValue(strategy= GenerationType.AUTO, generator="sequence") 

我有一個錯誤在MySQL該序列發生器是未知的。

,如果我用

@Id 
@Column(name="id") 
@GeneratedValue(strategy= GenerationType.AUTO) 

我不能爲每個表指定序列名稱。 這是解決這個問題的方法嗎?

我用Hibernate作爲JPA我提供

回答

0

您聲明id字段爲:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY, 
    generator = "LegacyIdGenerator") 
@GenericGenerator(
    name = "LegacyIdGenerator", 
    strategy = "com.backend.hibernate.PenetratingIdGenerator") 

其中PenetratingIdGenerator是您的自定義ID發生器實現IdentifierGenerator接口。現在您可以根據您的基礎數據庫生成您想要的ID。 無論如何,您的應用程序將知道哪些數據庫是基礎的,因爲您需要在配置文件中定義不同的方言等。

0

對於註釋@GeneratedValue(strategy = GenerationType.AUTO)JPA持久性提供程序將針對特定數據庫採取適當策略。對於Oracle數據庫,這將是SEQUENCE,如果您不指定任何內容,Hibernate將使用單個全局序列,即hibernate_sequence

@Id 
@GeneratedValue(strategy=GenerationType.AUTO, generator="seq_gen_default") 
@SequenceGenerator(name="seq_gen_default", sequenceName="ENTITY_SEQ") 
private Long id; 
相關問題