JPA返回自定义实体

两个实体类:

@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;
    }
发布了28 篇原创文章 · 获赞 1 · 访问量 628

猜你喜欢

转载自blog.csdn.net/c630843901/article/details/105182917