When we use hibernate, we will always encounter queries with multi-Table connections. This problem is always a variety of confusions. Solution 1: Create a view and create a view in the database in advance. Create the object class of this view and specify a primary key. Create a query for this view. solution 2: Add a temporary HQL query attribute to the object class. Code: Entity class: @ Entity @ Table (name = "FLOW_RU_INFO") public class FlowRuInfo implements java. io. serializable {// Fields private String id; private String deptid; private String processinstanceid; private String content; private String creator; private Date createtime; private String flowtype; private String flowcode; private String formid; private String state; private String currentuserid; private String pflowtype; private String formNo; // temporary attribute private String task; private String lastAudiUser; private String nextUser; private String userName; private String deptName; // Constructors/** default constructor */public FlowRuInfo () {} public FlowRuInfo (String id, String deptid, String processinstanceid, String content, String creator, date createtime, String flowtype, String flowcode, String formid, String state, String currentuserid, String pflowtype, String formNo, String task, String lastAudiUser, String nextUser, String userName, String deptName) {super (); this. id = id; this. deptid = deptid; this. processinstanceid = processinstanceid; this. content = content; this. creator = creator; this. createtime = createtime; this. flowtype = flowtype; this. flowcode = flowcode; this. formid = formid; this. state = state; this. currentuserid = currentuserid; this. pflowtype = pflowtype; this. formNo = formNo; this. task = task; this. lastAudiUser = lastAudiUser; this. nextUser = nextUser; this. userName = userName; this. deptName = deptName;} // Property accessors @ GenericGenerator (name = "generator", strategy = "uuid. hex ") @ Id @ GeneratedValue (generator =" generator ") @ Column (name =" ID ", unique = true, nullable = false, length = 32) public String getId () {return this. id;} public void setId (String id) {this. id = id ;}@ Column (name = "DEPTID", length = 32) public String getDeptid () {return this. deptid;} public void setDeptid (String deptid) {this. deptid = deptid;} @ Column (name = "PROCESSINSTANCEID", length = 100) public String getProcessinstanceid () {return this. processinstanceid;} public void setProcessinstanceid (String processinstanceid) {this. processinstanceid = processinstanceid;} @ Column (name = "CONTENT", length = 800) public String getContent () {return this. content;} public void setContent (String content) {this. content = content ;}@ Column (name = "CREATOR", length = 32) public String getCreator () {return this. creator;} public void setCreator (String creator) {this. creator = creator;} @ Column (name = "CREATETIME", length = 7) public Date getCreatetime () {return this. createtime;} public void setCreatetime (Date createtime) {this. createtime = createtime;} @ Column (name = "FLOWTYPE", length = 32) public String getFlowtype () {return this. flowtype;} public void setFlowtype (String flowtype) {this. flowtype = flowtype;} @ Column (name = "FLOWCODE", length = 32) public String getFlowcode () {return this. flowcode;} public void setFlowcode (String flowcode) {this. flowcode = flowcode;} @ Column (name = "FORMID", length = 32) public String getFormid () {return this. formid;} public void setFormid (String formid) {this. formid = formid;} @ Column (name = "STATE", length = 1) public String getState () {return this. state;} public void setState (String state) {this. state = state;} @ Column (name = "CURRENTUSERID", length = 32) public String getCurrentuserid () {return this. currentuserid;} public void setCurrentuserid (String currentuserid) {this. currentuserid = currentuserid;} @ Column (name = "PFLOWTYPE", length = 32) public String getPflowtype () {return this. pflowtype;} public void setPflowtype (String pflowtype) {this. pflowtype = pflowtype;} @ Column (name = "FORM_NO", length = 32) public String getFormNo () {return formNo;} public void setFormNo (String formNo) {this. formNo = formNo;} @ Transient // annotation of this temporary attribute public String getTask () {return task;} public void setTask (String task) {this. task = task;} @ Transient public String getLastAudiUser () {return lastAudiUser;} public void setLastAudiUser (String lastAudiUser) {this. lastAudiUser = lastAudiUser;} @ Transient public String getNextUser () {return nextUser;} public void setNextUser (String nextUser) {this. nextUser = nextUser;} @ Transient public String getUserName () {return userName;} public void setUserName (String userName) {this. userName = userName;} @ Transient public String getDeptName () {return deptName;} public void setDeptName (String deptName) {this. deptName = deptName ;}} HQL query statement: // hql multi-table join assembled entity String hql = "select new com. entity. flow. flowRuInfo (t. id, t. deptid, t. processinstanceid, "+" t. content, t. creator, t. createtime, t. flowtype, "+" t. flowcode, t. formid, t. state, t. currentuserid, "+" t. pflowtype, t. formNo, t. creator, t. creator, "+" t. creator, u. empName, d. depName) from FlowRuInfo t, Department d, User u where t. creator = u. userid and d. depId = t. deptid order by t. createtime desc ";