在Hibernate查询中重复

时间:2011-01-23 18:28:48

标签: java hibernate spring jpa

我有一个包含当前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没有出现此类问题,问题是由于我的健身类的默认序列化设置导致的序列化问题。现在修复了平均时间感谢您的帮助! 提前致谢 克里斯

2 个答案:

答案 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;

希望这会有所帮助。