我有一个包含当前2个不同项目的数据库但是当我尝试查询数据库时,DAO返回一个大小为2的List,这是正确的,但列表中的每个项目都是数据库中的第一个项目,而不是两个唯一的项目物品。这真让我困惑,我不明白为什么这样做或者为什么这样做之前有人经历过这个?
public List<Workout> getHistory(String username) {
String sql = "from Workout w where w.username = '"+username+"'";
return template.find(sql);
}
@Entity
@Table(name="workout")
public class Workout {
private static Logger logger = Logger.getLogger(Workout.class);
@Id
@Column(name="username")
private String username;
@Column(name="added_date")
private String added_date;
@Lob
@Column(name="workout")
byte[] workout;
public byte[] getWorkout() {
return workout;
}
public void setWorkout(byte[] workout) {
this.workout = workout;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAdded_date() {
return added_date;
}
public void setAdded_date(String added_date) {
this.added_date = added_date;
}
}
对此非常感谢。
事实证明,唯一ID没有出现此类问题,问题是由于我的健身类的默认序列化设置导致的序列化问题。现在修复了平均时间感谢您的帮助! 提前致谢 克里斯
答案 0 :(得分:1)
唯一键可能存在问题。
确保您的@Id
字段代表唯一密钥。
答案 1 :(得分:1)
您是否在数据库中使用相同的用户名进行了两次锻炼?
如果是这样,那么你不应该使用username作为id。
我不知道你的域名。但是我猜测我会为每个训练提供一个唯一的id(可能是Long),然后用户名可以是User对象的外键。
所以你应该有这样的东西:
@Entity
@Table(name="workout")
public class Workout {
private static Logger logger = Logger.getLogger(Workout.class);
@Id
@Column(name="id")
private Long id;
@Column(name="username")
private String username;
希望这会有所帮助。