Ошибка поиска JPA: «Для этой операции поиска был неправильно предоставлен экземпляр нулевого PK» - PullRequest
0 голосов
/ 21 января 2019

Проблема:

Я пытаюсь выполнить поиск по идентификатору сайта, чтобы извлечь записи из таблицы AA_SITE.

Но я получаю следующее исключение при выполнении кода вызова.Любая идея почему?

javax.ejb.EJBException: EJB Exception: ; nested exception is: 
    java.lang.IllegalArgumentException: An instance of a null PK has been incorrectly provided for this find operation.
    at weblogic.utils.StackTraceDisabled.unknownMethod()
Caused by: java.lang.IllegalArgumentException: An instance of a null PK has been incorrectly provided for this find operation.
    ... 1 more

Мой поиск Код вызова:

public Site ReadSite(Long siteId) {

    Query query =   em.createNamedQuery("Site.findSiteById", Site.class);
    query.setParameter("siteId",siteId);
    Site site = (Site)query.getSingleResult();    

    return site;
}

Код объекта:

package au.sdm.aa.entity;

import au.audit.utility.model.entities.v1.VersionableEntity;  
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;   

@Entity
@NamedQueries({@NamedQuery(name = "Site.findAllSitesByManagerId", 
                            query = "select o from Site o where o.managementId=:managmentId and o.parentSite IS NULL ORDER BY o.id ASC ",
                            hints={
                                @QueryHint(name=QueryHints.BATCH,value="o.colocatedSiteList"),
                                @QueryHint(name=QueryHints.BATCH_TYPE,value="EXISTS")
                            }),
                @NamedQuery(name = "Site.isThisSiteExsists", 
                            query = "select COUNT(o.id) from Site o where o.id =:siteId"),
                @NamedQuery(name = "Site.findSiteById", 
                            query = "select o from Site o where o.id =:siteId")
                })
@SequenceGenerator(name = "siteIdSequenceGen", sequenceName = "AA_SITE_ID_SEQ", allocationSize = 1, initialValue = 1)
@Table(name = "AA_SITE")
public class Site extends VersionableEntity {
    @SuppressWarnings("compatibility:4655825307977473383")
    private static final long serialVersionUID = 1L;

    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "siteIdSequenceGen")
    @Id
    @Column(nullable = false)
    private Long id;

    @ManyToOne(fetch=FetchType.LAZY, cascade = CascadeType.REFRESH )
    @JoinColumn(name = "PARENT_ID")
    private Site parentSite;

    @OneToMany(mappedBy = "parentSite", fetch=FetchType.LAZY, cascade = {CascadeType.REFRESH,CascadeType.REMOVE})
    @OrderBy("id ASC")
    private List<Site> colocatedSiteList;

    @OneToMany(mappedBy = "documentSite",  cascade = {CascadeType.ALL },orphanRemoval = true, fetch=FetchType.LAZY)
    private List<SiteDocument> siteDocumentList;

   @Column(name = "MANAGER_ID",nullable=false)
    private Long  managementId;

    @OneToMany(mappedBy = "contactSite", cascade = {CascadeType.ALL },orphanRemoval = true, fetch=FetchType.LAZY)
    private List<SiteContact> siteContactList;

    @OneToMany(mappedBy = "classSite",  cascade = {CascadeType.ALL },orphanRemoval = true,fetch=FetchType.LAZY)
    private List<SiteClass> siteClassList;          

    @OneToMany(mappedBy = "appSite", cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    private List<Application> applicationList;

    public Site() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }                        
}

Я не уверен, почему эта проблема происходит.было бы очень полезно, если бы кто-то мог дать какое-либо обоснованное предложение.

1 Ответ

0 голосов
/ 21 января 2019

Вы указали параметр siteId в методе ReadSite как null, что в итоге вызывает запрос как:

select o from Site o where o.id = null

Имея эту настройку:

@Id
@Column(nullable = false)

для идентификатора объекта вы получите сгенерированное исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...