hibernate获取的记录数与DB上的数量不匹配

时间:2016-05-20 13:09:48

标签: java sql hibernate

我有一个像下面的实体

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

我正在使用休眠标准来获取数据库中的所有记录;
    
@SuppressWarnings( “未登记”)
    @覆盖
    公共列表listTableOneEntites()
{         
Criteria criteria = getSession()。createCriteria(TableOneEntity.class);     
return(List)criteria.list();
    }

当我打印List的大小时,它给我417但在同一桌上的DB上进行计数*时,条目为410.

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

我们都在使用mysql DB 有没有人知道计数中的这种不匹配。

1 个答案:

答案 0 :(得分:0)

您正急切地获取一对多的ErrorMessage实体,因此我的猜测是某些TableOneEntity有多个ErrorMessage加入它们。

尝试添加criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)。如果这有效,那么你可能希望进一步研究它 - 我不记得它是否强制切换到多个选择而不是连接但我的直觉是因为你只有一个连接它应该仍然能够做到它有效。

为什么你的同事会得到不同的结果却超出我的意思 - 你们两个肯定都拥有完全相同的数据吗?您在运行计数*时是否正在执行已加入的查询?如果没有,那就尝试一下,看看你的是否会跳到417。