首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Datanucleus type_converter插件

Datanucleus type_converter插件
EN

Stack Overflow用户
提问于 2013-03-26 15:16:38
回答 2查看 187关注 0票数 0

我创建了一个转换器插件,类似于为类型X描述的here

然后我创建了这个类

代码语言:javascript
复制
class A {
    @Basic(fetch = FetchType.Eager)
    X x;
}

当我试图持久化一个A对象时,我得到了以下错误

代码语言:javascript
复制
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)

根据我的日志记录,这个插件似乎已经加载了。

代码语言:javascript
复制
Added converter for X<->java.lang.String using mypackage.myplugin.XStringConverter

使用调试器,我在转换器中设置了断点,但是流不会到达那里。

还能出什么差错呢?

我使用的是DataNucleus 3.1.3。

插件代码如下。

MANIFEST.MF

代码语言:javascript
复制
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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
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());
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-26 16:27:46

正如我在对这个问题的评论中所说的,你还需要提供关系型数据库管理系统JavaTypeMapping插件,因为如果没有它,TypeConverter就不会被使用。只需编写一个简单的JavaTypeMapping来扩展ObjectAsStringMapping,并使用您的TypeConverter即可。

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

票数 1
EN

Stack Overflow用户

发布于 2013-03-26 15:23:22

尝试将implements Serializable添加到您的类X。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15631418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档