gpt4 book ai didi

java - JPA, hibernate : find throws NullPointerException

转载 作者:行者123 更新时间:2023-11-30 08:07:06 25 4
gpt4 key购买 nike

我正在使用此代码通过主键从数据库中获取我的实体:

@Override
public Entity read(final long key) throws DAOException {
try {
EntityManager em = PM.getEntityManager();
em.getTransaction().begin();
Sportart result = em.find(Entity .class, key);
em.getTransaction().commit();
em.close();
return result;
} catch (Exception e) {
e.printStackTrace();
throw new DAOException("Error reading Entity.");
}
}

这是堆栈跟踪:

java.lang.NullPointerException
at org.hibernate.engine.internal.StatefulPersistenceContext.getLoadedCollectionOwnerOrNull(StatefulPersistenceContext.java:756)
at org.hibernate.event.spi.AbstractCollectionEvent.getLoadedOwnerOrNull(AbstractCollectionEvent.java:75)
at org.hibernate.event.spi.InitializeCollectionEvent.<init>(InitializeCollectionEvent.java:36)
at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1931)
at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:558)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:260)
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:554)
at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:142)
at org.hibernate.collection.internal.PersistentSet.hashCode(PersistentSet.java:447)
at abc.de.App.entities.Entity.hashCode(Entity.java:75)
at java.util.HashMap.hash(Unknown Source)
at java.util.HashMap.put(Unknown Source)
at java.util.HashSet.add(Unknown Source)
at java.util.AbstractCollection.addAll(Unknown Source)
at org.hibernate.collection.internal.PersistentSet.endRead(PersistentSet.java:344)
at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:251)
at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:238)
at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:211)
at org.hibernate.loader.plan.exec.process.internal.CollectionReferenceInitializerImpl.endLoading(CollectionReferenceInitializerImpl.java:168)
at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishLoadingCollections(AbstractRowReader.java:255)
at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:218)
at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:140)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:138)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102)
at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:100)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:693)
at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:92)
at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1933)
at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:558)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:260)
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:554)
at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:142)
at org.hibernate.collection.internal.PersistentSet.hashCode(PersistentSet.java:447)
at abc.de.App.entities.Other.hashCode(Other.java:206)
at java.util.HashMap.hash(Unknown Source)
at java.util.HashMap.put(Unknown Source)
at java.util.HashSet.add(Unknown Source)
at java.util.AbstractCollection.addAll(Unknown Source)
at org.hibernate.collection.internal.PersistentSet.endRead(PersistentSet.java:344)
at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:251)
at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:238)
at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:211)
at org.hibernate.loader.plan.exec.process.internal.CollectionReferenceInitializerImpl.endLoading(CollectionReferenceInitializerImpl.java:168)
at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishLoadingCollections(AbstractRowReader.java:255)
at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:218)
at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:140)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:138)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102)
at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:186)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4126)
at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:503)
at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:468)
at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:213)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:275)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:151)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1106)
at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:176)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2587)
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:991)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1110)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1068)
at abc.de.App.dao.implementations.DAOImpl.read(DAOImpl.java:44)
at abc.de.App.dao.implementations.DAOImpl.read(DAOImpl.java:1)
at abc.de.App.controllers.Controller.saveData(Controller.java:73)
at abc.de.App.views.View.lambda$2(View.java:183)
at java.lang.Thread.run(Unknown Source)

和实体:

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

@Entity
public class Entity implements Model {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long Entity_id;
@Column(nullable = false)
private String bez;
@Column(nullable = false)
private String bes;
@ManyToMany(mappedBy = "Entities", fetch = FetchType.EAGER)
private Set<Other> other = new HashSet<>();


public Entity() {

}

public long getEntity_id() {
return Entity_id;
}

public void setEntity_id(final long Entityid) {
this.Entity_id = Entityid;
}

public String getbez() {
return bez;
}

public void setbez(final String bez) {
this.bez = bez;
}

public String getbes() {
return bes;
}

public void setbes(final String bes) {
this.bes = bes;
}

public Set<Other> getOther() {
return other;
}

public void setOther(final Set<Other> Other) {
this.other = other;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((bes == null) ? 0 : bes.hashCode());
result = prime * result
+ ((bez == null) ? 0 : bez.hashCode());
result = prime * result
+ ((other == null) ? 0 : other.hashCode());
result = prime * result + (int) (Entity_id ^ (Entity_id >>> 32));
return result;
}

@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Entity other = (Entity) obj;
if (bes == null) {
if (other.bes != null) {
return false;
}
} else if (!bes.equals(other.bes)) {
return false;
}
if (bez == null) {
if (other.bez != null) {
return false;
}
} else if (!bez.equals(other.bez)) {
return false;
}
if (other == null) {
if (other.other != null) {
return false;
}
} else if (!other.equals(other.other)) {
return false;
}
if (Entity_id != other.Entity_id) {
return false;
}
return true;
}

@Override
public String toString() {
return "Entity [Entity_id=" + Entity_id + ", bez="
+ bez + ", bes=" + bes
+ ", other=" + other + "]";
}

}

我正在为我的其他实体使用相同的代码,并且在那里工作正常。

这可能是什么原因?

最佳答案

此错误伴随着用重复的错误消息填充控制台。它看起来像一个无限递归。那么它是从哪里来的呢?让我们看一下错误消息,我们将看到 hibernate 在后台某处为您的实体计算哈希值。在实体的 hashCode() 中,您调用 other.hashCode(),它将调用 Other.hashCode() 中的元素哈希求和。很可能您的 Other.hashCode() 调用了 Entities.hashCode() ,这将求和调用 Entity.hashCode() 的哈希值等等。 .-你得到无限递归。

关于java - JPA, hibernate : find throws NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33893122/

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