Java 将条件转换为自联接的分离条件
我想知道是否可以将此标准转换为分离的标准。我没有正确理解分离的标准。有人能帮忙吗Java 将条件转换为自联接的分离条件,java,hibernate,self-join,detachedcriteria,Java,Hibernate,Self Join,Detachedcriteria,我想知道是否可以将此标准转换为分离的标准。我没有正确理解分离的标准。有人能帮忙吗 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"), Restriction
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);
是否可以重写上面的内容,这样我就可以避免在下面给出的POJO中使用“@OneToMany”
波乔
@实体
@表(name=“OP_医生就诊”)
@SQLDelete(sql=“UPDATE OP\u DOCTOR\u VISIT SET DELETED='DELETED'其中OP\u VISIT\u ID=?和VERSION\u UPDATES=?”)
@其中(子句=“已删除”“已删除”“)
公共类OP_DOCTOR_访问实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“OP\u VISIT\u ID”)
私人长期访问ID;
@OneToMany(mappedBy=“OP\u VISIT\u ID”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@LazyCollection(LazyCollectionOption.EXTRA)
@Fetch(FetchMode.SELECT)
私人名单开放参观;
公众长期访问ID(){
返回操作访问ID;
}
公共无效设置访问ID(长访问ID){
this.OP_VISIT_ID=OP_VISIT_ID;
}
公共列表getOP_访问(){
回访;
}
公共无效访问(列表访问){
this.OP_VISIT=OP_VISIT;
}
}
仅在创建criteria对象的第一行
DetachedCriteria
允许您在没有会话的情况下创建查询。因此,在生成查询时不需要会话DetachedCriteria
与条件相同,只是您可以在不使用会话的情况下创建查询
DetachedCriteria DetachedCriteria=DetachedCriteria.forClass(OP_DOCTOR_VISIT.class)仅显示创建criteria对象的第一行
DetachedCriteria
允许您在没有会话的情况下创建查询。因此,在生成查询时不需要会话DetachedCriteria
与条件相同,只是您可以在不使用会话的情况下创建查询
DetachedCriteria DetachedCriteria=DetachedCriteria.forClass(OP_DOCTOR_VISIT.class)您只能找到**分离标准。请您解释一下第二句话。“事实上,当使用分离的条件使用另一个或新的会话(无缓存和会话的创建)时,您应该仔细考虑。”DetachedCriteria不使用任何会话。因此,不要将其与会话使用/链接。例如。没有可用的缓存。总是提前加载。请解释第二句话。“事实上,当使用分离的条件使用另一个或新的会话(无缓存和会话的创建)时,您应该仔细考虑。”DetachedCriteria不使用任何会话。因此,不要将其与会话使用/链接。例如。没有可用的缓存。总是提前加载。
@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;
}
}