如何在Hibernate 4.3.11中使用Criteria API连接所有(null和not null)映射类

时间:2018-06-18 05:13:54

标签: hibernate-criteria

我想用PostJob检索所有Violation实体,并且不为null。 这是我的违规类:

@Entity
@Table(name="violation")
public class Violation implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -5144260292214389455L;

    @Id
    @GenericGenerator(name = "viol_id", strategy = "com.ivc.talonsystem.util.keygens.ViolationIdGenerator")
    @GeneratedValue(generator = "viol_id")
    @Column(name = "id")
    private Integer id;

    @Column(name = "name_empl")
    private String nameEmpl;

    @NotEmpty
    @Column(name = "surname_empl")
    private String surnameEmpl;

    @Column(name = "lastname_empl")
    private String lastnameEmpl;

    @NotNull
    @Valid
    @JoinColumn(name = "id_company", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private AbstractCompany company;

    @JoinColumn(name = "id_post", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private PostJob post;

    @NotNull
    @Column(name = "stub_num")
    private Integer stubnum;

    @NotNull
    @Valid
    @JoinColumn(name = "id_viol", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Violguide violguide;
//getters and setters
}

当我试图使用Hibernate Query来获取对象时:

Session session=createSession();
        Query q=session.createQuery("SELECT v FROM Violation v ORDER BY v.dateseize ASC");
        List<Violation> violations=(List<Violation>)q.list();
        return violations;

我得到完整的Violations列表,其中PostJob为null且不为null。这是hibernate日志:

Hibernate: 
    select
        this_.id as id1_4_4_,
        this_.id_company as id_compa6_4_4_,
        this_.FIRST_NAME as FIRST_NA2_4_4_,
        this_.LAST_NAME as LAST_NAM3_4_4_,
        this_.PASSWORD as PASSWORD4_4_4_,
        this_.SSO_ID as SSO_ID5_4_4_,
        abstractco2_.id as id1_1_0_,
        abstractco2_.callname as callname2_1_0_,
        abstractco2_1_.briefname as briefnam1_7_0_,
        abstractco2_1_.fullname as fullname2_7_0_,
        abstractco2_2_.name as name1_8_0_,
        abstractco2_2_.id_rju as id_rju3_8_0_,
        abstractco2_3_.NAME as NAME1_9_0_,
        abstractco2_3_.ID_UNITDEP as ID_UNITD3_9_0_,
        abstractco2_4_.NAMEUNIT as NAMEUNIT1_10_0_,
        abstractco2_5_.NAME as NAME1_11_0_,
        abstractco2_5_.OTD as OTD3_11_0_,
        case 
            when abstractco2_1_.id is not null then 1 
            when abstractco2_2_.id is not null then 2 
            when abstractco2_3_.id is not null then 3 
            when abstractco2_4_.id is not null then 4 
            when abstractco2_5_.id is not null then 5 
            when abstractco2_.id is not null then 0 
        end as clazz_0_,
        underrjuco3_.id_rju as id_rju3_1_6_,
        underrjuco3_.id as id2_8_6_,
        underrjuco3_.id as id1_1_1_,
        underrjuco3_1_.callname as callname2_1_1_,
        underrjuco3_.name as name1_8_1_,
        underrjuco3_.id_rju as id_rju3_8_1_,
        unitdepart4_.id as id1_1_2_,
        unitdepart4_1_.callname as callname2_1_2_,
        unitdepart4_.NAMEUNIT as NAMEUNIT1_10_2_,
        rju5_.id as id1_1_3_,
        rju5_1_.callname as callname2_1_3_,
        rju5_.briefname as briefnam1_7_3_,
        rju5_.fullname as fullname2_7_3_ 
    from
        app_user this_ 
    inner join
        AbstractCompany abstractco2_ 
            on this_.id_company=abstractco2_.id 
    left outer join
        rju abstractco2_1_ 
            on abstractco2_.id=abstractco2_1_.id 
    left outer join
        underrju abstractco2_2_ 
            on abstractco2_.id=abstractco2_2_.id 
    left outer join
        underunitdep abstractco2_3_ 
            on abstractco2_.id=abstractco2_3_.id 
    left outer join
        unitdepart abstractco2_4_ 
            on abstractco2_.id=abstractco2_4_.id 
    left outer join
        v_stan abstractco2_5_ 
            on abstractco2_.id=abstractco2_5_.id 
    left outer join
        underrju underrjuco3_ 
            on abstractco2_.id=underrjuco3_.id_rju 
    left outer join
        AbstractCompany underrjuco3_1_ 
            on underrjuco3_.id=underrjuco3_1_.id 
    left outer join
        unitdepart unitdepart4_ 
            on abstractco2_3_.ID_UNITDEP=unitdepart4_.id 
    left outer join
        AbstractCompany unitdepart4_1_ 
            on unitdepart4_.id=unitdepart4_1_.id 
    left outer join
        rju rju5_ 
            on abstractco2_5_.OTD=rju5_.id 
    left outer join
        AbstractCompany rju5_1_ 
            on rju5_.id=rju5_1_.id 
    where
        this_.SSO_ID=?

如何使用Hibernate Criteria API正确完成? 当我尝试使用Criteria API检索它们时,我只获得了违反Post Post的Violation列表。 这是我的代码,我将使用Criteria API执行此操作:

Session session=createSession();    //createSession method from Parent Dao
criteria=session.createCriteria(Violation.class);
criteria.createCriteria("company", "comp");
criteria.createCriteria("post", "job");
criteria.createCriteria("violguide", "viol_guide"); List<Violation>
violations = criteria.list();

以及我得到的以下日志:

Hibernate: 
    select
        this_.id as id1_12_7_,
        this_.id_company as id_comp12_12_7_,
        this_.dateorder as dateorde2_12_7_,
        this_.seizedate as seizedat3_12_7_,
        this_.lastname_empl as lastname4_12_7_,
        this_.measure as measure5_12_7_,
        this_.name_empl as name_emp6_12_7_,
        this_.numorder as numorder7_12_7_,
        this_.id_post as id_post13_12_7_,
        this_.seizedfrom as seizedfr8_12_7_,
        this_.stopmoney as stopmone9_12_7_,
        this_.stub_num as stub_nu10_12_7_,
        this_.surname_empl as surname11_12_7_,
        this_.id_viol as id_viol14_12_7_,
        comp1_.id as id1_1_0_,
        comp1_.callname as callname2_1_0_,
        comp1_1_.briefname as briefnam1_7_0_,
        comp1_1_.fullname as fullname2_7_0_,
        comp1_2_.name as name1_8_0_,
        comp1_2_.id_rju as id_rju3_8_0_,
        comp1_3_.NAME as NAME1_9_0_,
        comp1_3_.ID_UNITDEP as ID_UNITD3_9_0_,
        comp1_4_.NAMEUNIT as NAMEUNIT1_10_0_,
        comp1_5_.NAME as NAME1_11_0_,
        comp1_5_.OTD as OTD3_11_0_,
        case 
            when comp1_1_.id is not null then 1 
            when comp1_2_.id is not null then 2 
            when comp1_3_.id is not null then 3 
            when comp1_4_.id is not null then 4 
            when comp1_5_.id is not null then 5 
            when comp1_.id is not null then 0 
        end as clazz_0_,
        underrjuco6_.id_rju as id_rju3_1_9_,
        underrjuco6_.id as id2_8_9_,
        underrjuco6_.id as id1_1_1_,
        underrjuco6_1_.callname as callname2_1_1_,
        underrjuco6_.name as name1_8_1_,
        underrjuco6_.id_rju as id_rju3_8_1_,
        unitdepart7_.id as id1_1_2_,
        unitdepart7_1_.callname as callname2_1_2_,
        unitdepart7_.NAMEUNIT as NAMEUNIT1_10_2_,
        rju8_.id as id1_1_3_,
        rju8_1_.callname as callname2_1_3_,
        rju8_.briefname as briefnam1_7_3_,
        rju8_.fullname as fullname2_7_3_,
        job2_.id as id1_6_4_,
        job2_.category as category2_6_4_,
        job2_.postname as postname3_6_4_,
        viol_guide3_.id as id1_13_5_,
        viol_guide3_.id_concl as id_concl4_13_5_,
        viol_guide3_.contentviol as contentv2_13_5_,
        viol_guide3_.elements as elements3_13_5_,
        conclusion11_.id as id1_5_6_,
        conclusion11_.content as content2_5_6_ 
    from
        violation this_ 
    inner join
        AbstractCompany comp1_ 
            on this_.id_company=comp1_.id 
    left outer join
        rju comp1_1_ 
            on comp1_.id=comp1_1_.id 
    left outer join
        underrju comp1_2_ 
            on comp1_.id=comp1_2_.id 
    left outer join
        underunitdep comp1_3_ 
            on comp1_.id=comp1_3_.id 
    left outer join
        unitdepart comp1_4_ 
            on comp1_.id=comp1_4_.id 
    left outer join
        v_stan comp1_5_ 
            on comp1_.id=comp1_5_.id 
    left outer join
        underrju underrjuco6_ 
            on comp1_.id=underrjuco6_.id_rju 
    left outer join
        AbstractCompany underrjuco6_1_ 
            on underrjuco6_.id=underrjuco6_1_.id 
    left outer join
        unitdepart unitdepart7_ 
            on comp1_3_.ID_UNITDEP=unitdepart7_.id 
    left outer join
        AbstractCompany unitdepart7_1_ 
            on unitdepart7_.id=unitdepart7_1_.id 
    left outer join
        rju rju8_ 
            on comp1_5_.OTD=rju8_.id 
    left outer join
        AbstractCompany rju8_1_ 
            on rju8_.id=rju8_1_.id 
    **inner join    //should be left outer join
        jobpost job2_ 
            on this_.id_post=job2_.id 
    inner join
        violguide viol_guide3_ 
            on this_.id_viol=viol_guide3_.id** 
    left outer join
        conclusionviolguide conclusion11_ 
            on viol_guide3_.id_concl=conclusion11_.id

0 个答案:

没有答案
相关问题