gpt4 book ai didi

java - 访问 jpa 实体关系时出现 NullPointerException

转载 作者:行者123 更新时间:2023-11-29 05:38:37 26 4
gpt4 key购买 nike

当我尝试为关系调用 getter 时,出现空指针异常。据我了解,容器将在实体仍受管理时使用适当的列表对象填充此字段。

模式是预先存在的,所以这是一个自下而上的映射。

这是一对多关系的“一方”实体:

@Entity
@Table(name=CollectorHeader.TABLE_NAME)
public class CollectorHeader implements Serializable {
...
@Id
@Column(name = "COLLECTORHEADERID")
private long id;

@OneToMany(mappedBy="collectorHeader", fetch=FetchType.LAZY)
private List<CollectorDetail> collectorDetails;
...
}

这是我的“多”面实体:

@Entity
@Table(name = CollectorDetail.TABLE_NAME)
public class CollectorDetail implements Serializable {
...
@Id
@Column(name = "COLLECTORDETAILID", unique = true)
long id;
...
@NotNull
@ManyToOne
@JoinColumn(name = "COLLECTORHEADERID")
private CollectorHeader collectorHeader;
...
public CollectorDetail(long id, @NotNull CollectorHeader collectorHeader,
long provenanceLinkPk, @NotNull String provenanceLinkClass) {
setId(id);
setCollectorHeader(collectorHeader);
setProvenanceLinkPk(provenanceLinkPk);
setProvenanceLinkClass(provenanceLinkClass);
}
}

这就是我所说的关系:

public CollectorDetail createCollectorDetail(long collectorHeaderId, long     provenanceLinkPk, @NotNull String provenanceLinkClass) throws SystemException {
CollectorHeader collectorHeader = em.find(CollectorHeader.class, collectorHeaderId);
if(collectorHeader == null) {
String error = "There is no Collector Header with the id: '" + collectorHeaderId + "'";
log.error(error);
throw new SystemException(error);
}
CollectorDetail collectorDetail =
new CollectorDetail(NextNumberFactory.getInstance().getNextNumberLong("cocollectordetail")
, collectorHeader
, provenanceLinkPk
, provenanceLinkClass);
collectorHeader.getCollectorDetails().add(collectorDetail); //NULLPOINTEREXCEPTION
em.merge(collectorDetail);
em.merge(collectorHeader);
return collectorDetail;
}

SQL 模式:

CREATE TABLE COCOLLECTORHEADER (
COLLECTORHEADERID DECIMAL(20,0) NOT NULL PRIMARY KEY,
COLLECTEDTIMESTAMP TIMESTAMP, -- the date when the information was collected
PROCESSEDTIMESTAMP TIMESTAMP, -- the date when the information was processed
FILEFORMAT VARCHAR(16) NOT NULL,
SEQUENCENUMBER INTEGER
);

CREATE TABLE COCOLLECTORDETAIL (
COLLECTORDETAILID DECIMAL(20,0) NOT NULL PRIMARY KEY,
COLLECTORHEADERID DECIMAL(20,0) NOT NULL
REFERENCES COCOLLECTORHEADER(COLLECTORHEADERID),
PROVENANCELINKPK DECIMAL(20,0) NOT NULL,
PROVENANCELINKCLASS VARCHAR(128) NOT NULL
);

如有任何帮助,我们将不胜感激。

最佳答案

使用有效的集合对象初始化 collectorDetails:

private List<CollectorDetail> collectorDetails = new ArrayList<CollectorDetail>();

同时检查 Is it good practice to initialize fields inside a JPA entity getter?

关于java - 访问 jpa 实体关系时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18567519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com