简体   繁体   中英

Hibernate Criteria One to Many And clause in Child sql

I have a find all method where I am using criteria to fetch records from database.

Class:

@Entity
@Table(name = "T_REF_MODEL")
public class RefModelORM extends AuditModelORM  implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1264852500063416982L;

    @Column(name = "REF_MODEL_ID")
    @Id
    private String refModelId;

    @Column(name="NAME")
    private String name;

    @Column(name="DESCRIPTION")
    private String description;

    @Column(name="TENANT_ID")
    private String tenantId;

    @Column(name="IS_TRAINED")
    private String isTrained;

    @Column(name = "REF_INPUT_EVENT_TYPE_ID")
    private String inputEventTypeId;

    @Column(name = "REF_MODEL_TYPE_ID", insertable=false, updatable=false)
    private String modelTypeId;

    @JoinColumn(nullable = false, name = "REF_MODEL_TYPE_ID", referencedColumnName = "REF_MODEL_TYPE_ID" )
    @ManyToOne(fetch=FetchType.LAZY)
    private ModelTypeORM modelType;

    @OneToMany(mappedBy="refmodel", fetch=FetchType.EAGER)
    private List<RefModelParameterORM> parameters;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public ModelTypeORM getModelType() {
        return modelType;
    }

    public void setModelType(ModelTypeORM modelType) {
        this.modelType = modelType;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getTenantId() {
        return tenantId;
    }

    public void setTenantId(String tenantId) {
        this.tenantId = tenantId;
    }


    public String getIsTrained() {
        return isTrained;
    }

    public void setIsTrained(String isTrained) {
        this.isTrained = isTrained;
    }


    public String getInputEventTypeId() {
        return inputEventTypeId;
    }

    public void setInputEventTypeId(String inputEventTypeId) {
        this.inputEventTypeId = inputEventTypeId;
    }

    public String getRefModelId() {
        return refModelId;
    }

    public void setRefModelId(String refModelId) {
        this.refModelId = refModelId;
    }

    public List<RefModelParameterORM> getParameters() {
        return parameters;
    }

    public void setParameters(List<RefModelParameterORM> parameters) {
        this.parameters = parameters;
    }


    public String getModelTypeId() {
        return modelTypeId;
    }

    public void setModelTypeId(String modelTypeId) {
        this.modelTypeId = modelTypeId;
    }

    @Override 
    public String toString() {
        return "RefModelORM [name=" + name + ", description=" + description + ", tenantId=" + tenantId + ", isTrained="
                + isTrained + ", inputEventTypeId=" + inputEventTypeId + ", modelTypeId=" + modelTypeId
                + ", refModelId=" + refModelId + "]";
    }
}

Method:

public List<RefModelORM> findAllRefModels(RefModelORM filter) throws SQLException {

        CriteriaBuilder builder = entityManager.getCriteriaBuilder();

        CriteriaQuery<RefModelORM> criteria = builder.createQuery(RefModelORM.class);
        Root<RefModelORM> refModelORM = criteria.from(RefModelORM.class);
        criteria.select(refModelORM);

        List<Predicate> predicates= new ArrayList<Predicate>();

        if (StringUtils.hasLength(filter.getStatus())) {
            if(CommonUtils.isValidStatus(filter.getStatus(), true)){
                predicates.add(builder.equal(refModelORM.get("status"), filter.getStatus()));
            }else{
                throw new ValidationException("Invalid status : " + filter.getStatus());
            }
        } else {
            predicates.add(builder.notEqual(refModelORM.get("status"), "D"));
        }
        if (StringUtils.hasLength(filter.getModelTypeId())){                
            predicates.add(builder.equal(refModelORM.get("modelTypeId"), filter.getModelTypeId()));
        }
        if (StringUtils.hasLength(filter.getName())) {
            predicates.add(builder.equal(refModelORM.get("name"), filter.getName()));

        }
        if (StringUtils.hasLength(filter.getCreateUser())) {
            predicates.add(builder.equal(refModelORM.get("createUser"), filter.getCreateUser()));
        }
        if (StringUtils.hasLength(filter.getUpdateUser())) {
            predicates.add(builder.equal(refModelORM.get("updateUser"), filter.getUpdateUser()));
        }

        criteria.where(builder.and(predicates.toArray(new Predicate[]{})));
        List<RefModelORM> list = entityManager.createQuery(criteria).getResultList();
        return list;
    }

Query Output:

Hibernate: select refmodelor0_.REF_MODEL_ID as REF_MODEL_ID1_0_, refmodelor0_.CREATE_DATE as CREATE_DATE2_0_, refmodelor0_.CREATE_USER as CREATE_USER3_0_, refmodelor0_.STATUS as STATUS4_0_, refmodelor0_.UPDATE_DATE as UPDATE_DATE5_0_, refmodelor0_.UPDATE_USER as UPDATE_USER6_0_, refmodelor0_.DESCRIPTION as DESCRIPTION7_0_, refmodelor0_.REF_INPUT_EVENT_TYPE_ID as REF_INPUT_EVENT_TY8_0_, refmodelor0_.IS_TRAINED as IS_TRAINED9_0_, refmodelor0_.REF_MODEL_TYPE_ID as REF_MODEL_TYPE_ID10_0_, refmodelor0_.NAME as NAME11_0_, refmodelor0_.TENANT_ID as TENANT_ID12_0_ from T_REF_MODEL refmodelor0_ where refmodelor0_.STATUS<>?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?
Hibernate: select parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_0_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_0_, parameters0_.REF_MODEL_TYPE_PARAMETER_ID as REF_MODEL_TYPE_PAR1_1_1_, parameters0_.REF_MODEL_ID as REF_MODEL_ID2_1_1_, parameters0_.REF_MODEL_PARAMETER_ID as REF_MODEL_PARAMETE3_1_1_, parameters0_.CREATE_DATE as CREATE_DATE4_1_1_, parameters0_.CREATE_USER as CREATE_USER5_1_1_, parameters0_.STATUS as STATUS6_1_1_, parameters0_.UPDATE_DATE as UPDATE_DATE7_1_1_, parameters0_.UPDATE_USER as UPDATE_USER8_1_1_, parameters0_.DESCRIPTION as DESCRIPTION9_1_1_, parameters0_.NAME as NAME10_1_1_, parameters0_.VALUE as VALUE11_1_1_ from T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?

The first sql is fetch of parent record and remaining are fetch on child records.

How can I add and clause in child sql for example T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=? and parameters0_.STATUS=?

Basically I want to pass status of parent to the child.

Thanks a lot in advance!

Criteria person = session.getCurrentSession().createCriteria(Person.class).createAlias("personId", "personId");

person.add(Restrictions.disjunction().add(Restrictions.ilike("PersonFirstname",Search,MatchMode.ANYWHERE))
.add(Restrictions.ilike("personId.Jacket",Search,MatchMode.ANYWHERE))
.add(Restrictions.ilike("personId.Color",Search,MatchMode.ANYWHERE))
.add(Restrictions.ilike("personId.Size",Search,MatchMode.ANYWHERE)));

Here from example restrictions you can put between your condition and get desired output

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM