简体   繁体   English

JPA,Hibernate:查找抛出NullPointerException

[英]JPA, Hibernate: find throws NullPointerException

I am using this code to get my entity from the database via the primary key: 我正在使用以下代码通过主键从数据库获取我的实体:

@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.");
    }
}

This is the stackTrace: 这是stackTrace:

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)

And the Entity: 和实体:

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 + "]";
    }

}

I am using the same code for my other entity and there it works fine. 我为其他实体使用了相同的代码,并且可以正常工作。

What could be the cause here? 这可能是什么原因?

This error comes with filling up a console with repeating error message. 使用重复的错误消息填充控制台会附带此错误。 It looks like an infinite recursion. 看起来像是无限递归。 So where it comes from? 那么它是从哪里来的呢? Lets look at the error message and we will see that somewhere under the hood hibernate calculates hash for your entity. 让我们看一下错误消息,我们将看到冬眠在引擎盖下的某个地方为您的实体计算哈希值。 In your Entity's hashCode() you call other.hashCode() which will sum hashes of elements in set calling Other.hashCode() . 在实体的hashCode() ,调用other.hashCode() ,这将对集合中元素的哈希值求和,从而调用Other.hashCode() Most likely your Other.hashCode() calls Entities.hashCode() which will sum hashes calling Entity.hashCode() and so on ... - there you get infinite recursion. 最有可能您的Other.hashCode()调用Entities.hashCode() ,这将对调用Entity.hashCode()哈希进行求和,依此类推……-您将获得无限递归。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Hibernate在EntityVerifyVersionProcess中抛出NullPointerException - Hibernate throws NullPointerException in EntityVerifyVersionProcess Hibernate ServiceImplementation抛出NullPointerException - Hibernate ServiceImplementation throws NullPointerException JPA中的动态COUNT引发NullPointerException - Dynamic COUNT in JPA throws NullPointerException Hibernate测试中抛出意外的NullPointerException - Unexpected NullPointerException throws in Hibernate test Hibernate检索数据引发nullpointerexception - Hibernate retrieving data throws nullpointerexception Spring boot JPA CrudRepository 在保存时抛出 NullPointerException - Spring boot JPA CrudRepository throws NullPointerException on save Hibernate JPA Criteria API抛出NullPointerException和ArrayIndexOutOfBoundsException - Hibernate JPA Criteria API throwing NullPointerException and ArrayIndexOutOfBoundsException 未填充 JPA/Hibernate 静态元模型属性 — NullPointerException - JPA/Hibernate Static Metamodel Attributes not Populated — NullPointerException 使用 JPA 和休眠查询数据时出现 NullPointerException - NullPointerException while query data using JPA with hibernate Hibernate / JPA - 访问SingularAttribute参数时出现NullPointerException - Hibernate/JPA - NullPointerException when accessing SingularAttribute parameter
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM