不总结就得付出代价
好久没有去研究Hibernate了,过去的东西已经全忘。今天拾起来时我付的代价非常之大,最终根源在于没有总结以往的开发经验,异常非常之熟悉确不能快速锁定问题源。我就以下面几几个问题做为切入点来总结一下,这块里所涉及到的知识点。
问题列表:
1,分组查询
2,left outer join/right outer join/full outer join/inner outer join区别
问题1:分组查询
分组查询不就是group by嘛,确实是这样。但是在hibernate里面查出来的数据就不一样,我所有指的定是每列数据。例如:
I)HQL(Hibernate Query Language)
from SysUser user group by userId
DetacheCriteria dc = DetachedCriteria.forClass(SysUser.class); dc.setProjection(Projections.groupProperty("this.userId")); List<SysUser> list = sysUserService.findByCriteria(dc);select this_.user_id from sys_user this_ group by this_.user_id
select new SysUser(user.userId,user.name) from SysUser user group by user.userId;
select user from SysUser user group by user.userId
@Entity@Table(name = "doc_document")@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)public class DocDocument implements java.io.Serializable {private static final long serialVersionUID = 8811969619989885931L;@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "doc_document_id")private Integer docDocumentId;@OneToMany(mappedBy = "docDocument")private Set<DocReceiveApprove> docReceiveApproves = new HashSet<DocReceiveApprove>(0);@OneToMany(mappedBy = "docDocument")private Set<DocFbTotal> docFbTotals = new HashSet<DocFbTotal>(0);@OneToMany(mappedBy = "docDocument")private Set<DocSend> docSends = new HashSet<DocSend>(0);@OneToMany(mappedBy = "docDocument")private Set<DocAttach> docAttachs = new HashSet<DocAttach>(0);@OneToMany(mappedBy="docDocument")private Set<DocDocumentReturn> docDocumentReturns = new HashSet<DocDocumentReturn>(0);//@Fetch(FetchMode.SELECT)@OneToMany(mappedBy="docDocument")private Set<DocDocumentUser> dcDocumentUsers = new HashSet<DocDocumentUser>(0);........}@Entity@Table(name = "doc_document_user")@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)public class DocDocumentUser implements java.io.Serializable {private static final long serialVersionUID = 8811969619989885931L;@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "doc_document_user_id")private Integer docDocumentUserId;private Integer isflow;@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE})@JoinColumn(name = "doc_document_id")private DocDocument docDocument;@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })@JoinColumn(name = "user_id")private CommonUser commonUser;.........}@Entity@Table(name="common_user")@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)public class CommonUser implements java.io.Serializable {private static final long serialVersionUID = 6147253484121456257L;@Id @GeneratedValue(strategy=GenerationType.IDENTITY) @JoinColumn(name = "user_id")private Integer userId;//用户ID//@Fetch(FetchMode.SELECT)@OneToMany(mappedBy="commonUser")private Set<DocDocumentUser> dcDocumentUsers = new HashSet<DocDocumentUser>(0);@OneToMany(mappedBy="commonUser")private Set<DocFbTotal> docFbTotals = new HashSet<DocFbTotal>(0);@OneToMany(mappedBy="commonUser")private Set<DocReceiveApproveCheck> docReceiveApproveChecks = new HashSet<DocReceiveApproveCheck>(0);@OneToMany(mappedBy="commonUser")private Set<DocReceiveinfoHst> docReceiveinfoHsts = new HashSet<DocReceiveinfoHst>(0);@OneToMany(mappedBy="commonUser")private Set<DocRrSend> docRrSends = new HashSet<DocRrSend>(0);@OneToMany(mappedBy="commonUser")private Set<DocReceiveApproveDraw> docReceiveApproveDraws = new HashSet<DocReceiveApproveDraw>(0);@OneToMany(mappedBy="commonUser")private Set<InfoSender> infoSenders = new HashSet<InfoSender>(0);@OneToMany(mappedBy="commonUser")private Set<DocPrintTrackHst> docPrintTrackHsts = new HashSet<DocPrintTrackHst>(0);@OneToMany(mappedBy="commonUser")private Set<LogOperation> logOperations = new HashSet<LogOperation>(0);......}public List<DocDocument> getWaitDocument() { DetachedCriteria dc = DetachedCriteria.forClass(DocDocument.class); dc.createCriteria("dcDocumentUsers", "ddu"); dc.setFetchMode("ddu", FetchMode.SELECT); dc.add(Restrictions.eq("ddu.dealstatus", "1")); dc.createCriteria("ddu.commonUser", "user"); dc.add(Restrictions.eq("user.userCode", "111")); dc.setProjection(Projections.groupProperty("this.docDocumentId")); List<DocDocument> list = this.documentService.findByCriteria(dc);}String hql = "select doc from DocDocument as doc left join doc.dcDocumentUsers as ddu left join ddu.commonUser as user group by doc.docDocumentId order by doc.docDocumentId desc";

select * from t_city group by province_id
from SysUser user group by userId
select * from t_city group by province_id
from SysUser user group by userId