我試圖從一個相當平凡的查詢中得到結果,並在jsp頁面上寫出這些結果。運行Glassfish 3.1,使用Netbeans。當我運行這個項目時,我得到了一個從例程返回的空列表。爲什麼我無法從這個相當平凡的查詢中得到任何結果?
當我右鍵單擊服務中的表並點擊查看數據時,我可以看到該表已填充,並且當我將查詢複製並超出查詢到SQL命令窗口並運行它時,它會給出預期的長度爲2的列表
有幾個類似的問題(如this one),其中沒有一個似乎有很大的幫助。我是新手,所以我可能沒有理解其他問題的解決方案。
這裏有很多因素,我不確定要包括什麼。我包含了執行查詢的例程,調用該例程的JSP代碼,我正在使用的實體類以及運行項目時獲得的服務器日誌的輸出。如果需要更多的信息,請告訴我,我會提出。
我真的很感激任何幫助。
格里夫
常規做查詢:
public static LinkedList<String> getCategories(EntityManager entityManager) {
try {
Query query = entityManager.createQuery(
"SELECT DISTINCT i.category from ItemEntity i");
List resultList = query.getResultList();
if (!resultList.isEmpty()) {
return new LinkedList<String>(resultList);
}
} catch(Exception e) {
System.out.println(e);
} finally {
return new LinkedList<String>();
}
}
JSP代碼調用子程序:
<body>
<h1>Store</h1>
<h2>Categories</h2>
<%
Context environmentContext
= (Context) new InitialContext().lookup("java:comp/env");
EntityManager entityManager
= (EntityManager) environmentContext.lookup("persistence/dbunit");
LinkedList<String> categories = DataBase.getCategories(entityManager);
ListIterator<String> categoryIterator = categories.listIterator();
String category = "";
%>
<form action="category.jsp">
<% while (categoryIterator.hasNext()) { %>
<% category = categoryIterator.next(); %>
<input type="submit" class="submitButtonAsLink" value="<%= category %>" name="<%= category %>" /><br />
<% } %>
</form>
</body>
ItemEntity.java:
@Entity
public class ItemEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private String id;
private String title;
private String longDescription;
private double cost;
private String category;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof ItemEntity)) {
return false;
}
ItemEntity other = (ItemEntity) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "store.model.entities.ItemTable[ id=" + id + " ]";
}
//getters and setters omitted.
//There are getters and setters for every field except id.
}
服務器日誌:
INFO: file:/Users/griffgeorge/Dropbox/school/design-arch/labs/Lab4Exercise/build/web/WEB-INF/classes/_Lab4ExercisePU logout successful
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
INFO: EclipseLink, version: Eclipse Persistence Services - 2.3.0.v20110604-r9504
INFO: file:/Users/griffgeorge/Dropbox/school/design-arch/labs/Lab4Exercise/build/web/WEB-INF/classes/_Lab4ExercisePU login successful
WARNING: Multiple [2] JMX MBeanServer instances exist, we will use the server at index [0] : [[email protected]].
WARNING: JMX MBeanServer in use: [[email protected]] from index [0]
WARNING: JMX MBeanServer in use: [[email protected]] from index [1]
WARNING: PER01000: Got SQLException executing statement "CREATE TABLE ITEMENTITY (ID VARCHAR(255) NOT NULL, CATEGORY VARCHAR(255), COST FLOAT, LONGDESCRIPTION VARCHAR(255), TITLE VARCHAR(255), PRIMARY KEY (ID))": java.sql.SQLException: Table/View 'ITEMENTITY' already exists in Schema 'APP'.
WARNING: PER01000: Got SQLException executing statement "CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(15), PRIMARY KEY (SEQ_NAME))": java.sql.SQLException: Table/View 'SEQUENCE' already exists in Schema 'APP'.
WARNING: PER01000: Got SQLException executing statement "INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0)": java.sql.SQLIntegrityConstraintViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL111012114449870' defined on 'SEQUENCE'.
INFO: WEB0671: Loading application [Lab4Exercise] at [/Lab4Exercise]
嘗試啓用日誌記錄SQL,參見,例如,在這裏,如何:http://stackoverflow.com/questions/3096814/jpa-eclipselink-returning-no-results/3097807#3097807;然後發佈結果,如果你還不知道。 – MaDa