データベースに接続するアプリケーションのサーバー部分のjunitテストを書いています。私たちの通常の戦略は、テストが Oracle データベースではなく hsqldb src/test/resources/
.META-INF/persistence.xml
そして、ここに私の問題があります-エンティティの1つに、次のように定義されたフィールドがあります:
@Id
@Column(name = "ID", nullable = false)
@SequenceGenerator(name="sequence", sequenceName="sequence")
@GeneratedValue(generator="sequence")
protected Integer id;
アプリケーションの標準実行中は問題なく動作します-@GeneratedValueの特定の戦略を定義していないためGenerationType.AUTO
、http://docs.oracle.com/javaee/5/api/javax/persistence/GenerationType. html#AUTOを使用すると、永続化プロバイダーは、その下にあるデータベースに応じて使用する戦略を決定できます。通常、それは Oracle であり、Oracle のデフォルトのジェネレーター戦略はGenerationType.SEQUENCE
です。
しかし、テストを実行すると、次のようになります。
[junit] Testcase: xxx.TestCase took 0 sec
[junit] Caused an ERROR
[junit] "xxx.Entity.id" declares generator name "sequence", but uses the AUTO generation type. The only valid generator names under AUTO are "uuid-hex" and "uuid-string".
Hibernate @ generatedvalue for HSQLDBのコメントによると、hsqldb のデフォルト戦略はGenerationType.IDENTITY
.
明らかな解決策はstrategy=GenerationType.SEQUENCE
、エンティティのフィールド定義に追加することですが、1) テスト ケースに対応するために作業コードを変更することは、一般的に悪い習慣です。2) 私には、このエンティティを変更するアクセス権も権限もありません。したがって、変更できないと仮定すると、次の予感は、 Hibernate にデータベースのデフォルトの代わりにMETA-INF/persistence.xml
デフォルトのジェネレーター戦略を指示する persistece-unit 定義内のテストにいくつかのプロパティを配置することです。SEQUENCE
私はそれを行うことができますか? はいの場合はどうすればそれを行うことができますか? いいえの場合は他に何ができますか?