Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa DataNucleus中多核生物的NPE_Jpa_Spring Data_Spring Data Jpa_Datanucleus - Fatal编程技术网

Jpa DataNucleus中多核生物的NPE

Jpa DataNucleus中多核生物的NPE,jpa,spring-data,spring-data-jpa,datanucleus,Jpa,Spring Data,Spring Data Jpa,Datanucleus,我有这个实体 @Entity public class ContactList extends Base { private static final long serialVersionUID = BaseEntity.serialVersionUID; @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) private Collection<User> contacts = n

我有这个实体

@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;
    }

}
知道为什么吗

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

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

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 
问题是转换器是自动应用的。但我认为这是DataNucleus的一个问题,因为该转换器是这样声明的

public class ListOfMyEnumsToStringAttributeConverter 
    extends CollectionOfEnumsToStringAttributeConverter<MyEnum, List<MyEnum>>
    implements AttributeConverter<List<MyEnum>, String>
DataNucleus的另一个问题是,即使应该记录警告/错误消息,也会引发NPE


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

发生这种情况是因为来自org.datanucleus.store.rdbms.query.BulkFetchExistsHelpergetSQLStatementForContainerField:93方法storeMgr.getBackingStoreForFieldclr,mmd,null;因此,调用type is null,然后在不进行任何额外检查的情况下访问该类型。这是真的。但是如果抛出异常,我认为NPE不是理想的行为。无论如何,我也在日志DataNucleus.Datastore.Schema-DEBUG:Field[ContactList.contacts]->Columns[ContactList.contacts]中发现了这一点,使用类型为org.DataNucleus.store.rdbms.mapping.java.TypeConverterMapping org.DataNucleus.store.rdbms.mapping.Datastore.VarCharRDBMSMapping的映射。我编辑了这个问题来添加它。如果这不应该起作用,那么应该抛出一个带有清晰消息的异常。但是你可以用@Basic注释一个集合,所以。。。
public class ListOfMyEnumsToStringAttributeConverter 
    extends CollectionOfEnumsToStringAttributeConverter<MyEnum, List<MyEnum>>
    implements AttributeConverter<List<MyEnum>, String>