gpt4 book ai didi

java - Datanucleus type_converter 插件

转载 作者:行者123 更新时间:2023-12-01 14:44:09 24 4
gpt4 key购买 nike

我创建了一个转换器插件,如描述的 here对于 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

使用调试器,我在转换器中设置了断点,但流程没有到达那里。

还有什么可能出错的地方吗?

我使用的是 DataNucleus 3.1.3。

插件代码如下。

list .MF

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

插件.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());
}
}

最佳答案

正如我在对该问题的评论中所说,您还需要提供 RDBMS JavaTypeMapping 插件,因为如果没有该插件,则不会使用 TypeConverter。只需编写一个简单的 JavaTypeMapping 来扩展 ObjectAsStringMapping,并使用您的 TypeConverter。

在 DN 3.2 中,JavaTypeMapping 不是必需的,TypeConverter 就足够了。

关于java - Datanucleus type_converter 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15631418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com