【发布时间】:2014-11-19 04:36:03
【问题描述】:
我有一个表,比如 Instrument,ID、State 和 User_ID 作为列。
所以我有这个 JPA 查询来返回所有具有匹配的仪器记录 用户 ID。
query = manager.createQuery("SELECT instrument from Instrument instrument
where instrument.User_ID=:User_ID",Instrument.class);
query.setParameter("User_ID", User_ID);
List<Instrument> instruments= query.getResultList();
for(Instrument instrument:instruments){
System.out.println("Instrument ID "+instrument.getID());
// using sysout as it is not prod code yet
}
它只返回与匹配记录重复的第一条记录。
11:13:01,703 INFO [stdout] (http-/127.0.0.1:8080-1) Instrument ID 1
11:13:01,704 INFO [stdout] (http-/127.0.0.1:8080-1) Instrument ID 1
11:13:01,704 INFO [stdout] (http-/127.0.0.1:8080-1) Instrument ID 1
我在 Db 中有 3 条记录,仪器 ID 分别为 1、2 和 3
我在休眠时启用了 show sql 查询,查询直接在数据库上运行良好 并返回不同的记录。
休眠查询:
select instrumentjdo0_.User_ID as member_U1_0_, instrumentjdo0_.ID as ID2_0_,
instrumentjdo0_.state as state4_0_ from instrument instrumentjdo0_ where instrumentjdo0_.User_ID=?
仪器实体
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "instrument")
public class Instrument{
@Id
@Column(name="User_ID", length=9, unique=true, nullable=false)
String user_ID;
@Column(name="ID",nullable=false)
String ID;
@Column(name="state",nullable=false)
String state;
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getUserID() {
return user_ID;
}
public void setUserID(String userID) {
this.user_ID = userID;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
不知道我错过了什么。
【问题讨论】:
-
您的问题中好像放错了Query,再检查一遍 --> User_ID=: "user_ID",
-
是的,你是对的..修复它!谢谢!
-
能否将hibernate生成的查询添加到您的问题中。
-
我也添加了休眠查询
-
好的,查询看起来不错。现在你怎么能说查询多次返回相同的记录?您是如何迭代列表的,能否请您也添加该代码?
标签: java sql oracle hibernate jpa