当前位置: 首页 > 知识库问答 >
问题:

hibernate获取的记录数与数据库计数不匹配

李鹏
2023-03-14

我有一个如下的实体

@Entity
@Table(name = "table1")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class TableOneEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "created_by")
private String createdBy;

@Column(name = "title_in_unicode")
private String titleInUnicode;


@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "table1_id")
@LazyCollection(LazyCollectionOption.FALSE)
private Set<ErrorMessages> errorMessages = new HashSet<ErrorMessages>();

错误消息实体如下所示

@Entity
@Table(name = "error_messages")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class ErrorMessages {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long errorId;

@Column(name = "table1_id")
private Long table1Id;

@Column(name = "field_key")
private String fieldKey;

@Column(name = "field_value")
private String fieldValue;

我使用hibernate标准从数据库中获取所有记录

@SuppressWarnings(“unchecked”)
@Override
公共列表listTableOneEntites()
{
标准条件=getSession().createCriteria(TableOneEntity.class);
返回(列表)标准。列表();
}

当我打印列表的大小时,它给我417,但是在同一个表上对数据库进行计数时,条目是410。

但是,我的同事在本地机器上使用相同的转储运行相同的代码,得到的两个条目都是410。

我们都在使用mysql数据库
有人知道计数不匹配的情况吗。

共有1个答案

陈誉
2023-03-14

您正在急切地获取一个对许多的错误消息实体,所以我猜测一些TableOneEntity有多个错误消息加入到它们中。

尝试添加条件。setResultTransformer(Criteria.DISTINCT\u ROOT\u实体)。如果这样做有效,那么你可能希望进一步研究它——我不记得它是否强制切换到多个选择,而不是一个连接,但我的直觉是,既然你只有一个连接,它应该仍然能够有效地完成它。

我无法理解为什么你们的同事会得到不同的结果——你们两个确实拥有完全相同的数据吗?运行count*时是否正在执行联接查询?如果没有,那么试试看你的跳转到417。

 类似资料:
  • 问题内容: 有没有一种方法可以获取MySQL数据库中所有表的行数而不在每个表上运行? 问题答案: 不过请从文档中注意:对于InnoDB表, 行数只是 SQL优化中使用 的粗略估计 。您需要使用COUNT(*)进行精确计数(这更昂贵)。

  • 我正在使用entityMenager登录,并没事。

  • 我在Sybase数据库中有一个表,其中有一列is_req。它的数据类型是char(1)。它在我的hbm文件中的属性定义如下: 属性名称="is必需"列="is_req"类型="boolean" 现在,当我尝试使用标准/限制进行比较时,比如:,我得到以下例外: 如果我尝试做,我得到以下异常: com.sybase.jdbc2.jdbc.SybSQLException:不允许从数据类型'VARCHAR

  • 问题内容: 我正在为我的Web应用程序使用SQL Logger。我希望能够记录由用户与GUI交互触发的SQL查询。我在Spring环境中工作,与Maven和Mybatis一起工作。我将Web应用程序打包成一个战争,并将其部署到tomcat上。 我希望能够直接使用SQL来访问数据库。我可以尝试像在Log4j中那样使用SocketAppender / HTMLAppender,并发布查询,以便其他非S

  • 从(在文件中)开始,一直到模式,我几乎尝试了任何名称空间,但我看到的只是如下所示: 这年头有办法做到这一点吗?

  • 我试图在火花数据帧中显示几个不同列的不同计数,以及对第一列进行分组后的记录计数。 所以如果我有col1、col2和col3,我想按col1分组,然后显示col2的不同计数和col3的不同计数。然后,我想在col1的同一组之后显示记录计数。最后,在一个agg语句中完成这一切…有什么想法吗?