[Seasar-user:18986] [S2JDBC] Postgresql: スキーマを指定した場合にシーケンスが取得できません

Tomoyuki Kano [E-MAIL ADDRESS DELETED]
2009年 12月 7日 (月) 22:12:07 JST


加納です

環境
DB: PostgreSQL 8.3.8
S2JDBC-Gen 2.4.40
s2-framework/tiger/extension-2.4.40


PostgreSQL で @Table(schema=xxx)を指定した場合に
@GeneratedValue(strategy = GenerationType.IDENTITY) だと insert で例外。

テーブル名 myschma.mytable でプロパティ id の場合 s2jdbc-gen では
シーケンス myschma.mytable_id_seq を生成していますが s2jdbc で insert()
した場合、スキーマ指定を付けずに public.mytable_id_seq を取得しようと
するため例外が発生するようです

org.seasar.framework.exception.SQLRuntimeException: [ESSR0072]SQLで例外
(SQL=[select currval('mytable_id_seq')], Message=[[ESSR0072]SQLで例外
(SQL=[select currval('mytable_id_seq')], Message=[0], ErrorCode=42P01,
SQLState={3})が発生しました : [SQLで例外(Message=[ERROR: relation
"mytable_id_seq" does not exist], ErrorCode=0, SQLState=42P01)が発生しま
した。], [ERROR: relation "mytable_id_seq" does not exist], ErrorCode=0,
SQLState=42P01)が発生しました
at
org.seasar.framework.util.PreparedStatementUtil.executeQuery(PreparedStatementUtil.java:51)
at
org.seasar.extension.jdbc.id.IdentityIdGenerator.getGeneratedId(IdentityIdGenerator.java:117)
at
org.seasar.extension.jdbc.id.IdentityIdGenerator.postInsert(IdentityIdGenerator.java:77)
at
org.seasar.extension.jdbc.query.AutoInsertImpl.postExecute(AutoInsertImpl.java:250)
at
org.seasar.extension.jdbc.query.AbstractAutoUpdate.executeInternal(AbstractAutoUpdate.java:126)
at
org.seasar.extension.jdbc.query.AbstractAutoUpdate.execute(AbstractAutoUpdate.java:90)
at
org.seasar.extension.jdbc.service.S2AbstractService.insert(S2AbstractService.java:138)
.. 以下省略 ..

--
tomo.



Seasar-user メーリングリストの案内