Ticket #6877

PostgreSQLでidentityアノテーションを使用すると例外発生
Open Date: 2005-09-29 18:14 Last Update: 2005-09-29 18:22

Reporter:
Owner:
(None)
Type:
Status:
Open
Component:
(None)
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None

Details

環境
PostgreSQL 8.0 Windows
JDBC 8.0 321
S2Dao 1.0.28

PostgreSQLのIDの自動生成(serial)の列に対して、
public static final String id_ID = "identity";
を使用すると、insertで以下の例外が発生します。

但し、DBの更新は行われ、レコードも追加されます。


回避方法

identityの代わりに
public static final String NO_PERSISTENT_PROPS = "id"
を使用する。


例外:

org.seasar.framework.exception.EmptyRuntimeException:
[ESSR0007]sqlはnullあるいは空であってはいけません
at
org.seasar.extension.jdbc.impl.BasicHandler.prepareStatement(BasicHandler.java:78)
at
org.seasar.extension.jdbc.impl.BasicSelectHandler.prepareStatement(BasicSelectHandler.java:133)
at
org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:120)
at
org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:107)
at
org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:97)
at
org.seasar.dao.id.AbstractIdentifierGenerator.executeSql(AbstractIdentifierGenerator.java:42)
at
org.seasar.dao.id.IdentityIdentifierGenerator.setIdentifier(IdentityIdentifierGenerator.java:26)
at
org.seasar.dao.impl.InsertAutoHandler.postUpdateBean(InsertAutoHandler.java:39)
at
org.seasar.dao.impl.AbstractAutoHandler.execute(AbstractAutoHandler.java:132)
at
org.seasar.dao.impl.AbstractAutoHandler.execute(AbstractAutoHandler.java:107)
at
org.seasar.dao.impl.AbstractAutoStaticCommand.execute(AbstractAutoStaticCommand.java:34)
at
org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:36)
at
seasar.TestDao$$EnhancedByS2AOP$$281d4b$$MethodInvocation$$insert1.proceed(MethodInvocationClassGenerator.java)
at
seasar.TestDao$$EnhancedByS2AOP$$281d4b.insert(TestDao$$EnhancedByS2AOP$$281d4b.java)
at seasar.TestDaoTest.testOperation(TestDaoTest.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at junit.framework.TestCase.runTest(TestCase.java:154)
at
org.seasar.extension.unit.S2TestCase.runTestTx(S2TestCase.java:1196)
at
org.seasar.extension.unit.S2TestCase.runBare(S2TestCase.java:914)
at
junit.framework.TestResult$1.protect(TestResult.java:106)
at
junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)


コンソール:

DEBUG 2005-09-29 17:59:11,912 [main] 物理的なコネクショ
ンを取得しました
DEBUG 2005-09-29 17:59:11,912 [main] 論理的なコネクショ
ンを取得しました
DEBUG 2005-09-29 17:59:12,162 [main] 論理的なコネクショ
ンを閉じました
DEBUG 2005-09-29 17:59:12,232 [main] 論理的なコネクショ
ンを取得しました
DEBUG 2005-09-29 17:59:12,232 [main] INSERT INTO test
(bangou) VALUES (1000)
DEBUG 2005-09-29 17:59:12,252 [main]
DEBUG 2005-09-29 17:59:12,322 [main] 物理的なコネクショ
ンを取得しました
DEBUG 2005-09-29 17:59:12,322 [main] 論理的なコネクショ
ンを取得しました
DEBUG 2005-09-29 17:59:12,322 [main] 論理的なコネクショ
ンを閉じました
DEBUG 2005-09-29 17:59:12,322 [main] 論理的なコネクショ
ンを閉じました
DEBUG 2005-09-29 17:59:12,322 [main] 物理的なコネクショ
ンを閉じました
DEBUG 2005-09-29 17:59:12,342 [main] 物理的なコネクショ
ンを閉じました

Ticket History (1/1 Histories)

2005-09-29 18:22 Updated by: frdm
Comment
Logged In: YES
user_id=2388

ファイル添付できないみたいなので、使用したソースをのっけてお
きます

public interface TestDao {
public static final Class BEAN = TestDto.class;

int insert(TestDto dto);
}

public class TestDto {
public static final String TABLE = "test";
public static final String id_ID = "identity";

private long id;
private int bangou;

public int getBangou() {
return bangou;
}
public void setBangou(int bangou) {
this.bangou = bangou;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login