zoukankan      html  css  js  c++  java
  • hibernate-DetachedCriteria实现关联表条件复查

    表结果如下

    CREATE TABLE `ent_lable` (
      `idStr` char(32) NOT NULL,
      `pk_1` char(6) NOT NULL,
      `pk_2` char(32) NOT NULL,
      PRIMARY KEY (`idStr`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

    本身为一张多对多的中间表

    业务如下

      要根据pk_1查询所有的pk_2,然后再根据所得的pk_2的值查询出相关连的pk_1

    模型:

        import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    import org.hibernate.annotations.GenericGenerator;
    
    
    @Entity
    @Table(name="ent_lable")
    public class EntLable  extends BaseModel{
    
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(generator="paymentableGenerator")
        @GenericGenerator(name="paymentableGenerator",strategy="uuid")
        @Column(name="idStr")
        private String idStr;
        @Column(name="pk_1")
        private String pk_1;
        @Column(name="pk_2")
        private String pk_2;
        public void setIdStr(String idStr){
            this.idStr=idStr;
        }
        public String getIdStr(){
            return idStr;
        }
        public String getPk_1() {
            return pk_1;
        }
        public void setPk_1(String pk_1) {
            this.pk_1 = pk_1;
        }
        public String getPk_2() {
            return pk_2;
        }
        public void setPk_2(String pk_2) {
            this.pk_2 = pk_2;
        }
        
    }

    DetachedCriteria的处理逻辑

    DetachedCriteria dc = DetachedCriteria.forClass(EntLable.class);
    if(StringUtils.isBlank(pk_1)) return null;
    dc.add(Restrictions.eq("pk_1", pk_1));
    dc.setProjection(Projections.property("pk_2"));
    DetachedCriteria dc1 = DetachedCriteria.forClass(EntLable.class);
    dc1.add(Property.forName("pk_2").eq(dc));

    另,父类

    import org.springframework.util.StringUtils;
    
    
    public abstract class BaseModel extends BaseObject implements Modelable {
        
        private static final long serialVersionUID = 1L;
    
        public int hashCode() {
            String idStr = getIdStr();
            return StringUtils.isEmpty(idStr)?super.hashCode():idStr.hashCode();
        }
    
        public boolean equals(Object other) {
            if (other == null) {
                return false;
            }
            if (other == this) {
                return true;
            }
            /*因为字节码增强的关系,getClass()不能用作判断的依据*/
            if (getClass().getPackage() != other.getClass().getPackage()) {
                return false;
            }
            if (hashCode() == other.hashCode()) {
                return true;
            }
            return false;
        }
    }
    import java.io.Serializable;
    
    import org.apache.commons.lang.builder.ToStringBuilder;
    import org.apache.commons.lang.builder.ToStringStyle;
    import org.apache.log4j.Logger;
    
    public class BaseObject implements Cloneable, Serializable {
        private static final long serialVersionUID = 1L;
        /**日志对象*/
        protected final Logger log = Logger.getLogger(getClass());
        /**覆盖toString方法,ToStringStyle取值为ToStringStyle.SHORT_PREFIX_STYLE
         * ,调试的时候注意会自动取所有引用的值,会触发所有的延迟加载
         * @return String
         * @see org.apache.commons.lang.builder.ToStringBuilder#reflectionToString(Object, ToStringStyle)
         */
        public String toString() {
            return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
        }
        /**
         * 提供默认的clone方法的实现,不支持深层复制
         * @return Object
         */
        public Object clone() {
            try {
                return super.clone();
            } catch (CloneNotSupportedException ex) {
                throw new IllegalArgumentException(ex.getMessage());
            }
        }
    }
    import java.io.Serializable;
    
    
    public interface Modelable extends JSONNotAware,Serializable, Cloneable {
        String getIdStr();
        void setIdStr(String idStr);
    }
    /**
     * 实现此接口的对象,都不会被ModelUtils中的model2JSON和modelList2JSONArray转换方法序列化
     */
    public interface JSONNotAware {
    
    }
  • 相关阅读:
    GCD
    SQLite
    将博客搬至CSDN
    Extjs 4 总结
    spring mvc 复杂参数注入
    7/12 聊天室结束
    7/10
    7/6一些知识点
    随便写写
    spring boot 入门操作(三)
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/5132449.html
Copyright © 2011-2022 走看看