【问题标题】:Hibernate criteria returning list which contain same objects, How to resolve it?休眠条件返回包含相同对象的列表,如何解决?
【发布时间】:2014-11-02 17:29:23
【问题描述】:

我写的限制如下,

 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 行具有差异值的行。 当我通过休眠条件执行它时,它给出了 11 个相同值的对象。我通过 Eclipse 中的调试检查了groupList 相同的id 中的所有对象,我该如何解决它。请帮帮我。

【问题讨论】:

  • 你为什么要使用 gt、lt 和 between。对于清晰的查询,您可以使用 hql 并传递变量。 stackoverflow.com/questions/12699064/…
  • 我试过这样,输出也一样。
  • 您的vehiclenoid。您如何期望通过 id 查询得到多个结果?
  • 哦,是的..,实际上该表中没有主键。如果我删除@Id 会导致任何问题吗?

标签: java sql hibernate hibernate-criteria


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 是的,我的 bean 中有这三行,但在我的表中我没有主键,所以我尝试不使用 @Id。但它会引发错误。
  • @Raghu 看到我的答案,那里清楚地解释了,要么将新字段设为Id,要么如果您使用现有的vehicleno 作为Id,您将只获得一条记录。跨度>
  • 是的..,谢谢兄弟,我已经为 id 创建了一个字段。然后它起作用了。
  • 谢谢@ankur-singhal。你的回答对我也有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 2021-10-13
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多