2016-02-16 3 views
1

Я хотел бы знать, могу ли я преобразовать эти критерии в отдельный критерий. Я неправильно понимаю отдельные критерии. может кто-то помочь.преобразовать критерии в отдельные критерии для самостоятельного присоединения

Criteria crit = sessionC.createCriteria(OP_DOCTOR_VISIT.class, "OPDV1"); 
crit.createAlias("OPDV1.OP_VISIT", "OPDV2", JoinType.LEFT_OUTER_JOIN, Restrictions.and(Restrictions.eq("OPDV2.FORM", "NEW"), Restrictions.ge("OPDV2.USER_DATETIME", fromdate), Restrictions.le("OPDV2.USER_DATETIME", todate))); 
    crit.add(Restrictions.ge("OPDV1.USER_DATETIME", fromdate)); 
    crit.add(Restrictions.le("OPDV1.USER_DATETIME", todate)); 
    ProjectionList p1 = Projections.projectionList(); 
    p1.add(Projections.alias(Projections.count("OPDV1.OP_VISIT_ID"), "TOTAL")); 
    p1.add(Projections.count("OPDV2.FORM")); 
    p1.add(Projections.alias(Projections.sqlGroupProjection("date(this_.USER_DATETIME) as createdDate", "createdDate", new String[]{"createdDate"}, new Type[]{StandardBasicTypes.DATE}), "DAT")); 
    crit.setProjection(p1); 

Можно ли переписать выше, так что я мог избежать использования «@OneToMany» в моем POJO, приведенной ниже.

POJO

@Entity 
@Table(name = "OP_DOCTOR_VISIT") 
@SQLDelete(sql = "UPDATE OP_DOCTOR_VISIT SET DELETED = 'DELETED' WHERE OP_VISIT_ID = ? and VERSION_UPDATES = ?") 
@Where(clause = "DELETED <> 'DELETED'") 
public class OP_DOCTOR_VISIT implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "OP_VISIT_ID") 
private Long OP_VISIT_ID; 

@OneToMany(mappedBy = "OP_VISIT_ID", cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
@LazyCollection(LazyCollectionOption.EXTRA) 
@Fetch(FetchMode.SELECT) 
private List<OP_DOCTOR_VISIT> OP_VISIT; 

    public Long getOP_VISIT_ID() { 
     return OP_VISIT_ID; 
    } 

    public void setOP_VISIT_ID(Long OP_VISIT_ID) { 
     this.OP_VISIT_ID = OP_VISIT_ID; 
    } 

    public List<OP_DOCTOR_VISIT> getOP_VISIT() { 
     return OP_VISIT; 
    } 

    public void setOP_VISIT(List<OP_DOCTOR_VISIT> OP_VISIT) { 
     this.OP_VISIT = OP_VISIT; 
    } 

} 

ответ

0

Только первая строка, где вы создаете ваши критерии объект.

  1. DetachedCriteria позволяет создать запрос без сеанса. Таким образом, вы не требуете сеанса при создании запроса. DetachedCriteria соответствует критериям, за исключением того, что вы можете создавать свои запросы без сеанса.

    ОтдельностоящийCriteria detachedCriteria = DetachedCriteria.forClass (OP_DOCTOR_VISIT.class);

  2. Наконец, когда у вас есть объект сеанса доступен, вы можете выполнить ваш запрос

    `критерии .getExecutableCriteria (сессия).

0

DetachedCriteria крит = DetachedCriteria.forClass (OP_DOCTOR_VISIT.class, "OPDV1");

Отключенные критерии позволяют создать запрос без сеанса. Затем вы можете выполнить поиск в произвольном сеансе.

На самом деле вы должны тщательно подумать, если использовать отдельные критерии, используя другой или новый сеанс (без кеша и создания сеанса).

Они наиболее полезны для выполнения некоторых условий соединения, подзапросов и запросов за пределами текущего сеанса. Другим распространенным применением является повторное использование кода.

Если вы используете Spring и хотите использовать HibernateTemplate, он не предоставляет метод createCriteria(). Вы найдете только ** DetachedCriteria.

+0

может у вас объяснить второе предложение. «На самом деле вы должны тщательно подумать, когда используете отложенные критерии, используя другой или новый сеанс (без кеша и создания сеанса)». –

+0

DetachedCriteria не использует сеанс. Так что не используйте/не связывайте его с session.i.e. кеш недоступен. Это всегда ранняя загрузка. –

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