Jpa 实体更新为映射的@ElementCollection抛出NPE
我有部门和员工实体。Employee表有三列:Jpa 实体更新为映射的@ElementCollection抛出NPE,jpa,eclipselink,Jpa,Eclipselink,我有部门和员工实体。Employee表有三列: 部门ID 钥匙 价值观 在Employee表的非空键的插入中插入空值。在更新期间,我收到了NullPointerException,在prop.put(key,value)期间,现有密钥的值为非空: 位于的java.lang.NullPointerException java.util.Hashtable.put(Hashtable.java:514)位于 org.eclipse.persistence.indirection.IndirectMa
NullPointerException
,在prop.put(key,value)
期间,现有密钥的值为非空:
位于的java.lang.NullPointerException
java.util.Hashtable.put(Hashtable.java:514)位于
org.eclipse.persistence.indirection.IndirectMap.put(IndirectMap.java:543)
在
org.eclipse.persistence.internal.querys.MapContainerPolicy.addInto(MapContainerPolicy.java:131)
在
org.eclipse.persistence.internal.querys.MappedKeyMapContainerPolicy.addInto(MappedKeyMapContainerPolicy.java:196)
在
org.eclipse.persistence.querys.DataReadQuery.executeNonCursor(DataReadQuery.java:226)
在
org.eclipse.persistence.querys.DataReadQuery.executeDatabaseQuery(DataReadQuery.java:152)
在
org.eclipse.persistence.querys.DatabaseQuery.execute(DatabaseQuery.java:899)
在
org.eclipse.persistence.querys.DataReadQuery.execute(DataReadQuery.java:137)
在
org.eclipse.persistence.querys.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:798)
在
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
在
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
在
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1786)
在
org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:129)
在
org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:116)
在
org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:89)
在
org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.InstanceEIMPL(UnitOfWorkValueHolder.java:173)
在
org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiate(UnitOfWorkValueHolder.java:234)
在
org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:89)
在
org.eclipse.persistence.indirection.IndirectMap.buildDelegate(IndirectMap.java:109)
在
org.eclipse.persistence.indirection.IndirectMap.getDelegate(IndirectMap.java:329)
在
org.eclipse.persistence.indirection.IndirectMap.put(IndirectMap.java:543)
EclipseLink版本是2.5.2
我有部门和员工实体,部门实体类与员工实体的关系如下:
@Entity
@Table(name = "DEPARTMENT" uniqueConstraints = {
@UniqueConstraint(columnNames = { "NAME" }) })
@NamedQueries( {
@NamedQuery(name = Department.findAll", query = "select d from Department d"),
@NamedQuery(name = Department.findByName", query = "select d from Department d WHERE d.name = :name")})
public class Department implements Serializable {
@ElementCollection
@MapKeyColumn( name = "KEY")
@Column( name = "VALUE")
@CollectionTable(name="DEPARTMENT_PROP", joinColumns = @joinColumn(name= "DEPARTMENT_ID))
private final Map<String, String> props = new HashMap();
public Map<String, String> getProperties() {
return properties;
}
@实体
@表(name=“DEPARTMENT”唯一约束={
@UniqueConstraint(columnNames={“NAME”})})
@命名查询({
@NamedQuery(name=Department.findAll),query=“从部门d中选择d”),
@NamedQuery(name=Department.findByName),query=“从Department d中选择d,其中d.name=:name”)}
公共类部门实现可序列化{
@元素集合
@MapKeyColumn(name=“KEY”)
@列(name=“VALUE”)
@CollectionTable(name=“DEPARTMENT\u PROP”,joinColumns=@joinColumn(name=“DEPARTMENT\u ID))
private final Map props=new HashMap();
公共映射getProperties(){
归还财产;
}
实体类的任何方法或持久实例变量都不能被删除
final
。从props
中删除此修饰符,映射注释看起来很好
请注意,在java版本7中,您不能输入空值,因为
java.util.Hashtable
不允许使用空值,并且正如您在异常日志中所看到的,EclipseLink使用的是map的实现。请参阅。我删除了final,但仍然存在相同的问题。您使用的是哪个java版本?建议您更新关于HashM的答案ap…您指的是Hashtable(HashMap允许空值)。跟踪中的Hashtable来自哪里…可能是EclipseLink内部变量。如果持久化字段,方法也可以是最终的