1

我有一个使用 JAX-RS、JPA 和 JAXB 的网络服务。我编写了一个应该从我的数据库中返回对象集合的方法。虽然这不会发生。它只返回一个项目。

我的方法:

@GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("findMeasurementsByRunID/{runID}")
    public List<Measurement> getMeasurementByRunId(@PathParam("runID") int runID) {
        List<Measurement> results = null;
        Query query = emf.createEntityManager().createNamedQuery(
                "findMeasurementsByRunID");
        query.setParameter("runid", runID);
        results = query.getResultList();
        return results;
    }

我的实体类:

    @Entity
    @NamedQueries({
            @NamedQuery(name = "findMeasurementsByRunID", query = "SELECT m "
                    + "FROM Measurement m "
                    + "WHERE m.runID = :runid"),
            @NamedQuery(name = "findMeasurementsByRunIDPosition", query = "SELECT m "
                    + "FROM Measurement m "
                    + "WHERE m.runID = :runid AND "
                    + "m.position = :position") })
    @XmlRootElement
    @XmlType(propOrder = { "runID", "rack", "position", "completionStatus",
            "countingTime", "cr51Counts", "cr51CPM", "cr51Error",
            "measurementDateTime", "protocolID", "protocolName" })
    public class Measurement implements Serializable {
        private static final long serialVersionUID = 1L;

        @Id
        @AttributeOverrides({
                @AttributeOverride(name = "runID", column = @Column(name = "RunID")),
                @AttributeOverride(name = "position", column = @Column(name = "Position")) })
        @Column(name = "RunID")
        private int runID;

        @Column(name = "Rack")
        private int rack;

        @Column(name = "Position")
        private int position;

        @Column(name = "Completionstatus")
        private int completionStatus;

        @Column(name = "CountingTime")
        private double countingTime;

        @Column(name = "Cr51Counts")
        private double cr51Counts;

        @Column(name = "Cr51CPM")
        private double cr51CPM;

        @Column(name = "Cr51Error")
        private double cr51Error;

        @Column(name = "MeasurementDateTime")
        @Temporal(TemporalType.TIMESTAMP)
        private Date measurementDateTime;

        @Column(name = "ProtocolID")
        private int protocolID;

        @Column(name = "ProtocolName")
        private String protocolName;

        public Measurement() {
        }

            // Getters and Setters...
}

如果我调用该服务,它只会将查询中的第一项作为 xml 返回,而不是整个集合。

输出:

<measurements>
  <measurement>
    <runID>418</runID>
    <rack>57</rack>
    <position>1</position>
    <completionStatus>0</completionStatus>
    <countingTime>3599.97</countingTime>
    <cr51Counts>2225.53</cr51Counts>
    <cr51CPM>5.11</cr51CPM>
    <cr51Error>44.26</cr51Error>
    <measurementDateTime>2012-12-14T14:08:37.0</measurementDateTime>
    <protocolID>3</protocolID>
    <protocolName>Cr-51 GFR (almindelig blodproever)</protocolName>
  </measurement>
</measurements>

我怎样才能让服务返回整个测量集合而不仅仅是一个项目?

我的数据: 在此处输入图像描述

4

1 回答 1

0

因此,您执行了一些查询“findMeasurementsByRunID”,将其限制为特定的“runId”,但您不明白为什么只获得 1 个测量对象?更新您的查询以删除/更改过滤器,以便它允许多个

于 2013-03-30T14:07:41.260 回答