[Seasar-user:18383] Re: [S2JDBC-Gen] [CONTAINER-232] がデグレ?

朝日奈 [E-MAIL ADDRESS DELETED]
2009年 8月 26日 (水) 22:39:15 JST


ぉぉ、早い対応ありがとうございます。

リリースまで、この方法で対応します。

Toshihiro Nakamura さんは書きました:
> 中村(taedium)です。
>
>   
>> 過去にあった修正したバグが再度発生している模様です。
>> versionは1つ古い 2.4.38 ですが 2.4.39 のリリースノートを確認する限りあ
>> りませんでしたので報告をします。
>>     
>
> 報告ありがとうございます。
> idGenerationパラメータにassigned以外の値を指定した場合に
> 発生していました。
> 2.4.40で対応されます。
>
>
> 以下、2.4.38での対応方法を示します。
>
> まず、AttributeModelFactoryImplを継承したクラスを作ってください。
> getAttributeModelメソッドで、プロパティの型
> Number型でなかったらGenerationTypeにnullを設定します。
>
> public class MyAttributeModelFactory extends AttributeModelFactoryImpl {
>
>     public MyAttributeModelFactory(boolean showColumnName,
>             boolean showColumnDefinition, boolean useTemporalType,
>             PersistenceConvention persistenceConvention) {
>         super(showColumnName, showColumnDefinition, useTemporalType,
>                 persistenceConvention);
>     }
>
>     @Override
>     public AttributeModel getAttributeModel(AttributeDesc attributeDesc) {
>         AttributeModel model = super.getAttributeModel(attributeDesc);
>         if (model.getGenerationType() != null) {
>             Class<?> clazz = ClassUtil.getWrapperClassIfPrimitive(model
>                     .getAttributeClass());
>             if (!Number.class.isAssignableFrom(clazz)) {
>                 model.setGenerationType(null);
>             }
>         }
>         return model;
>     }
> }
>
> 次に、FactoryImplを継承して、上記クラスのインスタンスを
> EntityModelFactoryImplのコンストラクタに渡します。
>
> public class MyFactory extends FactoryImpl {
>
>     public EntityModelFactory createEntityModelFactory(Command command,
>             String packageName, Class<?> superclass, boolean useTemporalType,
>             boolean useAccessor, boolean useComment, boolean showCatalogName,
>             boolean showSchemaName, boolean showTableName,
>             boolean showColumnName, boolean showColumnDefinition,
>             boolean showJoinColumn, PersistenceConvention persistenceConvention) {
>
>         return new EntityModelFactoryImpl(packageName, superclass,
>                 new MyAttributeModelFactory(showColumnName,
>                         showColumnDefinition, useTemporalType,
>                         persistenceConvention),
>                 new AssociationModelFactoryImpl(showJoinColumn),
>                 new CompositeUniqueConstraintModelFactoryImpl(), useAccessor,
>                 useComment, showCatalogName, showSchemaName, showTableName);
>     }
> }
>
> 最後に、gen-entityタスクで、上記のクラスを指定してください。
>
>   <gen-entity
>>     factoryclassname="example.MyFactory"
>   />
>   



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