0

タイプX用にここで説明するようなコンバータプラグインを作成しました。

次に、クラスを作成しました

class A {
    @Basic(fetch = FetchType.Eager)
    X x;
}

Aオブジェクトを永続化しようとすると、次のエラーが発生します

org.datanucleus.exceptions.NucleusDataStoreException: Object of type net.sf.jcommon.geo.Country isnt Serializable
org.datanucleus.store.rdbms.mapping.AbstractLargeBinaryRDBMSMapping.setObject(AbstractLargeBinaryRDBMSMapping.java:235)
org.datanucleus.store.mapped.mapping.SingleFieldMapping.setObject(SingleFieldMapping.java:207)
org.datanucleus.store.rdbms.fieldmanager.ParameterSetter.storeObjectField(ParameterSetter.java:201)
org.datanucleus.state.AbstractStateManager.providedObjectField(AbstractStateManager.java:1447)

ロギングからわかる限り、プラグインはロードされているようです。

Added converter for X<->java.lang.String using mypackage.myplugin.XStringConverter

デバッガーを使用して、コンバーターにブレークポイントを設定しましたが、フローはそこに行きません。

他に何がうまくいかなかったでしょうか?

DataNucleus3.1.3を使用しています。

プラグインコードは次のとおりです。

MANIFEST.MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: myplugin
Bundle-SymbolicName: mypackage.myplugin
Bundle-Version: 1.0.1
Bundle-Vendor: Adrian Ber

plugin.xml

<?xml version="1.0"?>
<plugin id="mypackage.myplugin" name="DataNucleus plug-ins" provider-name="myplugin">
<extension point="org.datanucleus.type_converter">
    <type-converter name="dn.x-string" member-type="mypackage.myplugin" 
        datastore-type="java.lang.String"
        converter-class="mypackage.myplugin.XStringConverter" />
</extension>
</plugin>

XStringConverter

package mypackage.myplugin;
import org.datanucleus.store.types.converters.TypeConverter;

public class XStringConverter implements TypeConverter<X, String> {

private static final long serialVersionUID = 1L;

@Override
public String toDatastoreType(Country memberValue) {
    return memberValue == null ? null : memberValue.getISO();
}

@Override
public Country toMemberType(String datastoreValue) {
    return  datastoreValue == null ? null : X.findByISO(datastoreValue.trim());
}
}
4

2 に答える 2

1

質問に対する私のコメントで述べたように、RDBMS JavaTypeMappingプラグインも提供する必要があります。これがないと、TypeConverterは使用されないためです。ObjectAsStringMappingを拡張し、TypeConverterを使用する単純なJavaTypeMappingを作成するだけです。

DN 3.2では、JavaTypeMappingは必須ではなく、TypeConverterで十分です。

于 2013-03-26T08:27:45.903 に答える
0

implements SerializableクラスXに追加してみてください。

于 2013-03-26T07:23:22.310 に答える