[Seasar-user:1364] MySQLのBoolカラム

Hideaki Maekawa maekawa
2004年 12月 16日 (木) 10:43:48 JST


前川です。
Booleanは私的にタイムリーなネタなんで便乗します。

MySQLを使用してプロパティにBoolean(ラッパーの方)を使用すると、
S2Dao(BeanDescImplかな?)が混乱するようです。ちなみにプロパティ
をbooleanにするか、getterをis〜ではなくget〜にすれば大丈夫です。

恐らくMySQLのBOOLがtinyInt(1)のシノニムなのでこれが元凶かと。

Beanクラス
-----------------------------------------------------------
public class T1 {
    public static final String TABLE = "t1";
    private Boolean bflg;
    public Boolean isBflg() { //<---getBflg()にすれば大丈夫
        return bflg;
    }
    public void setBflg(Boolean bflg) {
        this.bflg = bflg;
    }
}

diconファイル
-----------------------------------------------------------
<?xml version="1.0" encoding="Windows-31J"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
	"http://www.seasar.org/dtd/components21.dtd">
<components>
	<include path="dao.dicon"/>
	<component class="seasar.T1Dao">
		<aspect>dao.interceptor</aspect>
	</component>
</components>

実行クラス
-----------------------------------------------------------
public class Test {
    public static void main(String[] args) {
        S2Container container = S2ContainerFactory.create("T1.dicon");
        T1Dao dao = (T1Dao) container.getComponent(T1Dao.class);
        T1 t = new T1();
        t.setBflg(Boolean.TRUE);
        dao.insert(t);
    }
}

実行結果
-----------------------------------------------------------
[2004-12-16 10:18:26,043] [main] DEBUG (Logger.java:106) - 物理的なコネクションを取得しました
[2004-12-16 10:18:26,053] [main] DEBUG (Logger.java:106) - 論理的なコネクションを取得しました
[2004-12-16 10:18:26,203] [main] DEBUG (Logger.java:106) - 論理的なコネクションを閉じました
[2004-12-16 10:18:26,223] [main] DEBUG (Logger.java:106) - 論理的なコネクションを取得しました
[2004-12-16 10:18:26,223] [main] DEBUG (Logger.java:106) - 論理的なコネクションを閉じました
java.lang.NullPointerException
	at org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:27)
	at org.seasar.framework.beans.impl.PropertyDescImpl.getValue(PropertyDescImpl.java:83)
	at org.seasar.dao.impl.BeanMetaDataImpl.getAutoInsertBindVariables(BeanMetaDataImpl.java:570)
	at org.seasar.dao.impl.InsertAutoHandler.getBindVariables(InsertAutoHandler.java:23)
	at org.seasar.dao.impl.AbstractAutoHandler.execute(AbstractAutoHandler.java:53)
	at org.seasar.dao.impl.AbstractAutoHandler.execute(AbstractAutoHandler.java:45)
	at org.seasar.dao.impl.AbstractAutoStaticCommand.execute(AbstractAutoStaticCommand.java:22)
	at org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:37)
	at org.seasar.framework.aop.impl.MethodInvocationImpl.proceed(MethodInvocationImpl.java:82)
	at org.seasar.framework.aop.proxy.AopProxy.intercept(AopProxy.java:151)
	at seasar.T1Dao$$EnhancerByCGLIB$$f9e2a5b2.insert(<generated>)
	at seasar.Test.main(Test.java:41)
Exception in thread "main" 

--
株式会社フリーダム システム開発部
前川英昭 <[E-MAIL ADDRESS DELETED]>
DFEC F450 263C 26D2 C3D1 3494 4D88 DA18 4EA5 1CD4






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