私はarquillianでコンテナ内テストを実行しています。import.sql
デプロイメントにを追加して、データベースに事前入力しています。テスト中に、さらにいくつかのエンティティを作成したいと思います。
残念ながら、これは:で失敗しPersistenceException
ます
javax.persistence.PersistenceException:org.hibernate.exception.ConstraintViolationException:一意のインデックスまたは主キー違反: "PRIMARY_KEY_BE ON PUBLIC.KVS_MIPO_DOWNLOAD(ID)"
DBに事前入力しない場合、または新しいエンティティを永続化しない場合、すべてがスムーズに実行されます。
idは唯一の一意のフィールドであるため、シーケンスを使用したid生成である必要があると強く思います。
@Entity
@Table(name = "KVS_MIPO_DOWNLOAD")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public abstract class DownloadResource implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Integer id;
このエンティティは、一意の属性を追加しない別の具象エンティティのスーパークラスです。
両方の可能性に対応できるようにするために何ができるでしょうか?手動で挿入し、生成されたIDを使用しますか?
ありがとうございました
JBoss7.1.1のHibernate4.0.1でJPA2を使用しています。データベースはSybaseASE15です。
編集:これまでに見つけた回避策の1つは、手動で追加したエンティティのIDを、衝突を回避するのに十分な高さに設定することです。しかし、これは本番環境には十分ではありません。データベースへの書き込みアクセス権を持っている従業員が多すぎるため、手動で追加したくなる場合があります。この場合、アプリケーションが死んだり爆発したりしないように十分に堅牢であることが望ましいです。