Hibernate标准返回包含相同对象的列表,如何解决?

时间:2014-09-09 10:18:21

标签: java sql hibernate hibernate-criteria

我写了如下限制,

 DateFormat df = new SimpleDateFormat("yyyy-mm-dd");
 Date frmDate= df.parse("2014-01-01");
 Date toDate=df.parse("2014-09-16");

 Criteria criteria = session.createCriteria(HistoryLatitudeBean.class);
          criteria.add(Restrictions.eq("vehicleno",12));
          criteria.add(Restrictions.ge("rdate", frmDate)); 
          criteria.add(Restrictions.lt("rdate", toDate));
          criteria.add(Restrictions.between("rdate", frmDate, toDate));

          List<HistoryLatitudeBean> groupList=criteria.list();// <---groupList contains same objects

          for(HistoryLatitudeBean hb : groupList){

              System.out.println(hb.getLat());
          }

我的豆子是这样的,

@Entity
@Table(name="hlatlng")
public class HistoryLatitudeBean {

@Id
@Column(name="vehicleno")
private int vehicleno;
@Column(name="lat")
private String lat;
@Column(name="lng")
private String lng;
@Column(name="status")
private String status;
@Column(name="rdate")
private Date rdate;
@Column(name="rtime")
private Date rtime;

//getters and setters
}

我正在尝试以下查询, select * from hlatlng where vehicleno=12 and rdate BETWEEN '2014-01-01' and '2014-06-05'

在DB中,它给出了11行具有diff值的行。 当我通过休眠标准执行它时,它会给出11个具有相同值的对象。我在groupList id {{1}}中检查了所有objets中的调试,我该如何解决它。请帮帮我。

1 个答案:

答案 0 :(得分:2)

Aleksandr M评论似乎解决了这个问题。

您缺少使用@Id注释的字段。每个@Entity都需要一个@Id - 这是数据库中的主键。

Hibernate需要每个实体的标识符。

另外,需要修改您的查询以省略vehicleno,因为它是主键并且每次都会返回相同的结果。

@Id
@Column(name="vehicleno")
private int vehicleno;