私は、自動インクリメントするid列を持つ表と、ゲッターに@GeneratedValue(strategy = GenerationType.AUTO)
を注釈したJavaオブジェクトを持っています。これは節約するときに効果的ですが、単体テストの場合はIDを指定して確定的に指定します。 MySQL(私たちが使用しているDB)では、insert文に値を指定することができ、すべて正常に動作します。しかし、私は、Javaオブジェクト内のidフィールドを設定し、永続化しようとすると、休止状態は例外をスローします。 Hibernateに、一般的に生成された値の値を指定させる方法を教えてください。Java/Hibernate:autoincrement/@GeneratedValueを持つ列に特定の値を挿入するにはどうすればいいですか?
フィールド例:MySQLで
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return this.id;
}
作品:
INSERT INTO myTable (id, str)
VALUES (10,'this works!')
は動作しません:私は良いテスト駆動開発も支援するために事前に
MyObject myObject = new MyObject();
myObject.setId(10L); //remove this line and hibernate saves ok
myObject.setStr("this does not work.");
daoForMyObject.persist(myObject); //throws org.springframework.dao.DataIntegrityViolationException
感謝を!
これは実際に私がこの投稿を投稿してからテストで始めた方法です:-Pしかし、私は、自動インクリメントフィールドの値を明示的に設定する方法はまだ不思議です。 MySQLはこれを行うことができます。もしhibernateがMySQLと同じ動作をしていればいいでしょう - 提供されていなければautoの値を使ってください。それがバグだとは思わないでください。 – Zugwalt