簡體   English   中英

休眠異常-找不到命名參數

[英]Hibernate Exception - could not locate named parameter

我試圖從實體(表)StudySeries的數據庫中提取對象列表:

@Entity 
@Table(name="StudySeries", uniqueConstraints = {
@UniqueConstraint(columnNames = "SeriesInstanceUID")})
public class StudySeries implements Serializable {
    ...
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "SeId", unique = true, nullable = false)
    private Long seId;

    @Column(name="SeriesInstanceUID", unique=true, nullable = false)
    private String seriesInstanceUID;
    ...
    @ManyToOne
    @JoinColumn(name = "StId", referencedColumnName="StId")
    private StudyDetails studyDetails;
    ...
}

這個實體是N-1,與StudyDetails相連(在StudyDetails上有許多StudySeries):

@Entity
@Table(name="StudyDetails", uniqueConstraints = @UniqueConstraint(columnNames = "StudyInstanceUID"))
public class StudyDetails implements Serializable {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name="StId", unique = true, nullable = false)
    private Long stId;

    @Column(name="StudyInstanceUID", unique=true, nullable = false)
    private String studyInstanceUID;
    ...
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "studyDetails", cascade = CascadeType.ALL)
    private Set<StudySeries> studySeries = new HashSet<StudySeries>(0);
    ...
}

在我的StudySeriesDAOImpl()中,我試圖:

@Override
public List<StudySeries> getStudySeriesObjectsByStudyId(Long stId) {

    List<StudySeries> results=new ArrayList<>();
    Session s=HibernateUtil.openSession();
    s.beginTransaction();
    String hql = "from StudySeries E where E.studyDetails.stId = stId";
    Query query = s.createQuery(hql);
    query.setParameter("stId", stId);
    results = query.list();
    s.getTransaction().commit();
    s.close();
    log.info(">>>>> list size: " + results.size());        

    return results;
}

我也嘗試過hql查詢為:

String hql = "from StudySeries E where E.stId = stId";

但是我越來越:

org.hibernate.QueryParameterException: could not locate named parameter [stId]
at org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:100) at org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:100)
at org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:106)
at org.hibernate.internal.AbstractQueryImpl.determineType(AbstractQueryImpl.java:466)
at org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:436)
at com.npap.dao.StudySeriesDAOImpl.getStudySeriesObjectsByStudyId(StudySeriesDAOImpl.java:239)

任何想法有什么問題嗎?

在StudySeries類中,該ID命名為“ seId”,而不是“ stId”。 您應該這樣做:String hql =“來自StudySeries E,其中E.seId = stId”;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM