JPAでシーケンス
コメントであったテーブルにシーケンスを使ってエンティティは「@GeneratedValue(strategy=IDENTITY)」でとあったので再トライ。
というか、前のエントリで書いたのはすでにこの方法は試してたんだけどだめだったからで。
テストテーブルを作る
CREATE TABLE TEST ( ID INT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(255) );
エンティティを生成
HibernateToolから自動生成した
package struts2.sample.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import static javax.persistence.GenerationType.IDENTITY; import javax.persistence.Id; import javax.persistence.Table; @Entity @SuppressWarnings("serial") @Table(name = "TEST") public class Test implements java.io.Serializable { private Integer id; private String name; public Test() { } public Test(String name) { this.name = name; } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "ID", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @Column(name = "NAME") public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
手を加えたのは「@SuppressWarnings("serial")」を入れただけ。
自動生成した時点で「@GeneratedValue(strategy = IDENTITY)」は付加されてた。
Daoクラスにメソッド追加
@Override public void testAdd() { Test entity = new Test(); entity.setName("hoge"); getJpaTemplate().persist(entity); }
実行
javax.servlet.ServletException: Internal Exception: org.h2.jdbc.JdbcSQLException: シーケンス SEQ_GEN_SEQUENCE が見つかりません Sequence SEQ_GEN_SEQUENCE not found; SQL statement: CALL NEXT VALUE FOR SEQ_GEN_SEQUENCE [90036-69] at org.h2.message.Message.getSQLException(Message.java:91)
とまぁ、これがでて動かないと。