2016-06-15 12 views
0

以前のバージョンからデータをロードする空のSpringブートアプリケーションがあります。このデータには主キーが含まれています。したがって、私はLiquibase loadDataメソッドを使用します。liquibaseのインポート後にHibernateのシーケンスが更新されない

<column name="id" type="bigint" autoIncrement="${autoIncrement}"> 
    <constraints primaryKey="true" nullable="false"/> 
</column> 
<loadData tableName="point_of_interest" separator=";" file="classpath:config/liquibase/data/public.poi.csv"> 
</loadData> 

// the java annotations 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 

これは期待どおり動作しますが、Hibernateシーケンスは更新されません。新しいオブジェクトを保存する場合は、重複する主キーが生成されます。

私は間違っていますか?この問題への

乾杯、ダニエル

+0

「GenerationType.AUTO」では、主キーの生成に使用する戦略とデータベースに依存する戦略をJPAが決定します。どのデータベースを使用していますか? – Jens

+0

推測: 'GenerationType.AUTO'はプライマリキーのシーケンスを持つテーブルにつながりますが、これもまだハイバネートによって開始されます。あなたがliquibaseを使用する場合、休止状態はなく、主キーは更新されません。 (私は、Oracleのような実際のシーケンスについては言及していませんが、主キーを格納するために使用される純粋なテーブルです。私はmySQLがこのようなことをしていると思います)。 – Jens

+0

私はpostgresql 9.4+を使用しています –

答えて

0

私のソリューションは、(jHipsterチームフォームにコピー)休止シーケンスの開始値を高めることです。これはあなたのIDが< のstartValueですべてのデータを挿入することができますので、何の衝突は発生しません:

あなたのchangelogに配列を付加する、LiquiBaseをして休止状態、あなたが春を使用していると仮定すると、ダニエルの答え@に追加
<changeSet id="00000000000000" author="jhipster" dbms="postgresql,oracle"> 
    <createSequence sequenceName="hibernate_sequence" startValue="20000" incrementBy="1"/> 
</changeSet> 
0

<changeSet id="00000000000000" author="jhipster" dbms="postgresql,oracle"> <createSequence sequenceName="hibernate_sequence" startValue="20000" incrementBy="1"/> </changeSet>

GenerationType.SEQUENCEを使用するように、エンティティのあなたの主キー列を変性することは、この問題を解決するだろう。

@Id 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator") 
@SequenceGenerator(name = "sequenceGenerator") 
private Long id; 
関連する問題