2016-05-11 1 views
0

У меня есть метод, где я использую критерии для извлечения записей из базы данных.Критерий спящего режима от одного до многих И статья в Child sql

Класс:

@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_ где parameters0_.REF_MODEL_ID =? и parameters0_.STATUS =?

В принципе, я хочу передать статус родителя ребенку.

Большое спасибо!

ответ

0
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))); 

Вот из примеров ограничений вы можете поместить между условием и получить желаемый результат

Смежные вопросы