其实这种方式不局限于hibernate
problem:
项目中遇到好几次这种问题,需要根据某个字段去重,也就是查出来的某个字段必须的值必须都是unique的。
因为sql去重必须是整条数据所有字段完全相同才能去重,所以无法直接通过distinct根据某一列去重。
Solution:
给这个表添加一个标识列,表示某条数据能够代表一组数据,在插入数据的时候可以判断一下这个值是否可以作为标识列,可以的话则设置为true,否则false,之后在查询的时候可以加上这个条件,那么查出来的效果就相当于根据某一列去重。
“example: ”
table:
采购商 | 供应商 | 商品 |
采购商1 | 供应商1 | goods1 |
采购商1 | 供应商1 | goods3 |
采购商1 | 供应商1 | goods4 |
采购商1 | 供应商2 | goods5 |
采购商需要查询与自己绑定关系的供应商,这个时候需要根据供应商列进行去重,所以可以加一个标识列,当采购商跟这个供应商第一次绑定关系的时候把这个标识列设置true
采购商 | 供应商 | 商品 | 是否标识列 |
采购商1 | 供应商1 | goods1 | true |
采购商1 | 供应商1 | goods3 | false |
采购商1 | 供应商1 | goods4 | false |
采购商1 | 供应商2 | goods5 | true |
当查询的时候把标识列为true的查出来就行。
条条大路通罗马,一定要发散思维。