两个实体类:
@Entity
@Table(name="hr_emp")
public class UserInfo {
@Id
@Column(name="FD_ID")
private String FD_ID;
@Column(name="EMPL_ID")
private String EMPL_ID;
@Column(name="EMPL_RCD")
private String EMPL_RCD;
@Column(name="EFF_DT")
private String EFF_DT;
@Column(name="EFF_SEQ")
private String EFF_SEQ;
@Column(name="SETID_DEPT")
private String SETID_DEPT;
@Column(name="DEPT_ID")
private String DEPT_ID;
@Column(name="SET_ID_JOB_CODE")
private String SET_ID_JOB_CODE;
@Column(name="COMPANY_ID")
private String COMPANY_ID;
@Column(name="JOB_CODE")
private String JOB_CODE;
@Column(name="C_RANK_CODE")
private String C_RANK_CODE;
@Column(name="C_RANK_DESCR")
private String C_RANK_DESCR;
@Column(name="C_QUARTERS_ID")
private String C_QUARTERS_ID;
@Column(name="SUPERVISOR_ID")
private String SUPERVISOR_ID;
@Column(name="HR_STATUS")
private String HR_STATUS;
@Column(name="C_WORK_SHOP")
private String C_WORK_SHOP;
@Column(name="C_WORK_SHOP_DEPT_ID")
private String C_WORK_SHOP_DEPT_ID;
@Column(name="LAST_HIRE_DT")
private String LAST_HIRE_DT;
@Column(name="TERMINATION_DT")
private String TERMINATION_DT;
@Column(name="ACTION")
private String ACTION;
@Column(name="BATCH_NUM")
private String BATCH_NUM;
@Column(name="FD_HR_DATE")
private String FD_HR_DATE;
@Column(name="MODIFY_TIME")
private String MODIFY_TIME;
@Entity
@Table(name="hr_personal")
public class UserPersonalInfo {
@Id
@Column(name="EMPL_ID")
private String EMPL_ID;
@Column(name="COUNTRY_NM_FORM")
private String COUNTRY_NM_FORM;
@Column(name="NAME_FORMAT")
private String NAME_FORMAT;
@Column(name="SEX")
private String SEX;
@Column(name="MAR_STATUS")
private String MAR_STATUS;
@Column(name="MAR_STATUS_DT")
private String MAR_STATUS_DT;
@Column(name="HIGHEST_EDUC_LVL")
private String HIGHEST_EDUC_LVL;
@Column(name="BIRTH_DATE")
private String BIRTH_DATE;
@Column(name="C_MOBILE")
private String C_MOBILE;
@Column(name="C_PHONE")
private String C_PHONE;
@Column(name="C_ADDRESS_HOME")
private String C_ADDRESS_HOME;
@Column(name="C_ADDRESS_HOME_NID")
private String C_ADDRESS_HOME_NID;
@Column(name="C_OPERATOR")
private String C_OPERATOR;
@Column(name="COMPANY_ID")
private String COMPANY_ID;
@Column(name="NATIONAL_ID")
private String NATIONAL_ID;
@Column(name="C_EMAIL")
private String C_EMAIL;
@Column(name="C_COMP_EMAIL")
private String C_COMP_EMAIL;
@Column(name="SET_ID")
private String SET_ID;
@Column(name="BATCH_NUM")
private String BATCH_NUM;
@Column(name="FD_HR_DATE")
private String FD_HR_DATE;
@Column(name="MODIFY_TIME")
private String MODIFY_TIME;
方法一:使用jpa自己的hql来查询
自定义实体类:
@JsonSerialize
public class Try {
private String name;
private String email;
private String mobile;
private String[] departments;
private int gender;
private String leader_user_id;
private String user_id;
private String setId;
private String HR_STATUS;
private String C_QUARTERS_ID;
public Try(){
}
public Try(String name, String email, String mobile, String department_id, String gender, String leader_user_id, String user_id,String setId,String HR_STATUS,String C_QUARTERS_ID){
this.name = name;
this.email = email;
this.mobile = mobile;
this.departments=new String[1];
this.departments[0] = department_id;
if(StringUtils.equals("M",gender)){
this.gender=1;
}else{
this.gender =2;
}
this.leader_user_id = leader_user_id;
this.user_id = user_id;
this.setId=setId;
this.HR_STATUS=HR_STATUS;
this.C_QUARTERS_ID=C_QUARTERS_ID;
}
DAO:
public interface TryRepository extends JpaRepository<UserInfo,Long> {
@Query("select new com.wiwj.appinterface.Result.Try(" +
"p.NAME_FORMAT ,p.C_EMAIL,p.C_MOBILE,e.DEPT_ID,p.SEX,e.SUPERVISOR_ID,e.EMPL_ID,e.SETID_DEPT,e.HR_STATUS,e.C_QUARTERS_ID)" +
" from UserInfo as e left join UserPersonalInfo as p on e.EMPL_ID=p.EMPL_ID " +
" where e.EMPL_RCD='0' and e.MODIFY_TIME>?1 and e.SETID_DEPT=?2 and e.EMPL_ID=?3" )
List<Try> findBysetIdAndId(String FD_HR_DATE, String setId, String Id);
}
返回的是自定义实体的List
方法二:使用sql
结果为List< Object>,需要转换函数,要求自定义实体类的构造函数的参数列表的位置,和sql查询的属性前后位置相同
/**
* 转换实体类
* @param list
* @param clazz
* @param <T>
* @return
* @throws Exception
*/
public static <T> List<T> castEntity(List<Object[]> list, Class<T> clazz) throws Exception {
List<T> returnList = new ArrayList<T>();
if(CollectionUtils.isEmpty(list)){
return returnList;
}
Object[] co = list.get(0);
Class[] c2 = new Class[co.length];
//确定构造方法
for (int i = 0; i < co.length; i++) {
if(co[i]!=null){
c2[i] = co[i].getClass();
}else {
c2[i]=String.class;
}
}
for (Object[] o : list) {
Constructor<T> constructor = clazz.getConstructor(c2);
returnList.add(constructor.newInstance(o));
}
return returnList;
}