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>