【问题标题】:Hibernate Criteria One to Many And clause in Child sqlChild sql中的Hibernate Criteria One to Many And子句
【发布时间】:2016-05-11 17:23:30
【问题描述】:

我有一个查找所有方法,我使用标准从数据库中获取记录。

类:

@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 + "]";
    }
}

方法:

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;
    }

查询输出:

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=?

第一个 sql 是获取父记录,其余的是获取子记录。

如何在子 sql 中添加和子句,例如 T_REF_MODEL_PARAMETER parameters0_ where parameters0_.REF_MODEL_ID=?和参数0_.STATUS=?

基本上我想将父母的状态传递给孩子。

提前非常感谢!

【问题讨论】:

    标签: java spring hibernate one-to-many hibernate-criteria


    【解决方案1】:
    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)));
    

    从示例限制中,您可以在条件和获得所需输出之间设置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 2016-11-05
      • 2018-12-26
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      相关资源
      最近更新 更多