1
我有一個使用JAX-RS,JPA和JAXB的web服務。我已經寫了一個方法,應該從我的數據庫返回一個對象集合。這雖然沒有發生。它只返回一個項目。JAX-RS返回您的自定義對象的集合?
@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不是整個集合返回的第一項服務:
我的方法:
@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;
}
我的實體類。
輸出:
<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>
我怎樣才能讓服務回報測量整個集合,而不僅僅是一個項目?
我的數據:
每個runID有多個條目。關鍵是複合,由runid和位置組成。 – Bohsen
runID是類的「Id」,是的,所以它的PK,那麼每個runID如何存在多行?或者你有一些額外的「Id」字段是祕密的?也許「位置」也應該是PK的一部分?在這種情況下將其標記爲,並定義一個ObjectIdClass。然後返回由您的JPA提供者調用的SQL是什麼 – DataNucleus
感謝您的幫助,現在它可以工作。原來我沒有從我的databaseschema的最新版本創建實體類。 – Bohsen