首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ManyToMany在DataNucleus中的NPE

ManyToMany在DataNucleus中的NPE
EN

Stack Overflow用户
提问于 2015-07-10 21:06:23
回答 1查看 129关注 0票数 0

我有个实体

代码语言:javascript
复制
@Entity
public class ContactList extends Base {

    private static final long serialVersionUID = BaseEntity.serialVersionUID;

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Collection<User> contacts = new HashSet<User>();

    public ContactList() {
    }

    public Collection<User> getContacts() {
        return contacts;
    }

    public void setContacts(Collection<User> contacts) {
        this.contacts = contacts;
    }

}

无论我从Spring数据存储库中调用什么方法,比如findAll(),我都会得到这个错误

代码语言:javascript
复制
java.lang.NullPointerException: null
at org.datanucleus.store.rdbms.RDBMSStoreManager.assertCompatibleFieldType(RDBMSStoreManager.java:1005) ~[datanucleus-rdbms-4.1.1.jar:na]
at org.datanucleus.store.rdbms.RDBMSStoreManager.getBackingStoreForField(RDBMSStoreManager.java:965) ~[datanucleus-rdbms-4.1.1.jar:na]
at org.datanucleus.store.rdbms.query.BulkFetchExistsHelper.getSQLStatementForContainerField(BulkFetchExistsHelper.java:93) ~[datanucleus-rdbms-4.1.1.jar:na]
at org.datanucleus.store.rdbms.query.JPQLQuery.compileQueryFull(JPQLQuery.java:894) ~[datanucleus-rdbms-4.1.1.jar:na]
at org.datanucleus.store.rdbms.query.JPQLQuery.compileInternal(JPQLQuery.java:296) ~[datanucleus-rdbms-4.1.1.jar:na]
at org.datanucleus.store.query.Query.executeQuery(Query.java:1801) ~[datanucleus-core-4.1.1.jar:na]
at org.datanucleus.store.query.Query.executeWithMap(Query.java:1747) ~[datanucleus-core-4.1.1.jar:na]
at org.datanucleus.api.jpa.JPAQuery.getResultList(JPAQuery.java:197) ~[datanucleus-api-jpa-4.1.1.jar:na]
at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:77) ~[spring-data-jpa-1.3.0.RELEASE.jar:na]
at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:55) ~[spring-data-jpa-1.3.0.RELEASE.jar:na]
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:95) ~[spring-data-jpa-1.3.0.RELEASE.jar:na]
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:85) ~[spring-data-jpa-1.3.0.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:312) ~[spring-data-commons-1.5.0.RELEASE.jar:na]

知道为什么吗?

我还尝试将targetEntity = User.class添加到@ManyToMany。我使用的是DataNucleus 1.4.1。

我在日志中发现了以下可能相关的行:

代码语言:javascript
复制
DataNucleus.Datastore.Schema - DEBUG: Field [ContactList.contacts] -> Column(s) [contactlist.contacts] using mapping of type "org.datanucleus.store.rdbms.mapping.java.TypeConverterMapping" (org.datanucleus.store.rdbms.mapping.datastore.VarCharRDBMSMapping) 
...
DataNucleus.Persistence - WARN : Member ContactList.contacts in table=contactlist has mapping=org.datanucleus.store.rdbms.mapping.java.TypeConverterMapping@6296ccf7 but expected mapping type=class org.datanucleus.store.rdbms.mapping.java.CollectionMapping 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 19:35:34

问题是Converter是自动应用的。但是我认为这是DataNucleus的一个问题,因为这个转换器被声明成这样

代码语言:javascript
复制
public class ListOfMyEnumsToStringAttributeConverter 
    extends CollectionOfEnumsToStringAttributeConverter<MyEnum, List<MyEnum>>
    implements AttributeConverter<List<MyEnum>, String>

DataNucleus的另一个问题是,即使应该记录警告/错误消息,也会引发NPE。

最后,但同样重要的是,当转换器被自动应用并导致错误时,转换器类应该是日志消息的一部分。

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

https://stackoverflow.com/questions/31350272

复制
相关文章

相似问题

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