【发布时间】:2015-09-13 16:08:24
【问题描述】:
我正在尝试从实体(表)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)
有什么想法吗?
【问题讨论】:
-
where E.studyDetails.stId =: stId. -
哎呀!你是对的......在查询中忘记了“:”...... pffff......
-
“:”也必须紧跟在参数名称之前!即没有空格
标签: java hibernate jakarta-ee jpa hibernate-criteria