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

标签 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());
          }

我的 bean 是这样的,

@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
}

我正在尝试以下查询, 从hlatlng中选择*,其中vehicleno=12且rdate介于“2014-01-01”和“2014-06-05”之间

在数据库中,它给出了 11 行,其中有差异值。 当我通过 hibernate 标准执行它时,它给出了 11 个具有相同值的对象。我通过 Eclipse 中的调试检查了 groupList 相同 id 中的所有对象,我该如何解决它。请帮助我。

最佳答案

该问题似乎已通过 Aleksandr M 评论得到解决。

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

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

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

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

关于java - Hibernate标准返回包含相同对象的列表,如何解决它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25742148/

相关文章:

sql - 在 PostgreSQL 中添加全文索引会加速我使用 LIKE 的常规查询吗?

java - JPA 将实体的多对多字段值替换为不同的值

java - 如何正确保存ManyToOne实体?

java - 如何找出在哪个接口(interface)上调用了方法?

java - 我真的需要 4 行代码才能从字符串中间获取值吗?

java - 未调用 Repaint()

SQL 字符串操作 [获取 '(' 左侧的所有文本]

mysql - 在触发器中获取动态表名

来自 unix 机器的 Java Swing ComboBox 文件列表

java - 部署到 JBoss Application Server 7.1 时出现 HikariConnectionProvider ClassNotFoundException