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 { }
hibernate-DetachedCriteria实现关联表条件复查的更多相关文章
- hibernate DetachedCriteria实现多表关联查询createAlias的使用
记录本例查询初衷: 有表: 表1,表2,表3 关系 1 many-to-one 2 2 many-to-one 3 结果:要通过表3中的条件反向查询表1中相关的数据 public Page<We ...
- update关联其他表批量更新数据-跨数据库-跨服务器Update时关联表条件更新
1.有时在做项目时会有些期初数据更新,从老系统更新到新系统.如果用程序循环从老系统付给新系统. 2.有时在项目中需要同步程序,或者自动同步程序时会有大量数据更新就可能用到如下方法了. 3.为了做分析, ...
- Hibernate 多对多关联查询条件使用
from Brand as b inner join fetch b.styles as s where s.styleId=?
- 将一个多表关联的条件查询中的多表通过 create select 转化成一张单表的sql、改为会话级别临时表 【我】
将一个多表关联的条件查询中的多表通过 create select 转化成一张单表的sql 将结果改为创建一个会话级别的临时表: -- 根据下面这两个sql CREATE TABLE revenu ...
- Hibernate DetachedCriteria实现
前段时间在做模糊查询,并利用数据库分页,DAO用hibernate实现,刚开始的时候 根据业务层的数据,拼hql语句进行查询,且不说要进行一些if判断,单从结构上来说, 底层的数据访问层依赖于业务层 ...
- Hibernate中的多表查询及抓取策略
1.Hibernate中的多表查询 1.1SQL中的多表查询 [交叉连接] select * from A,B; [内连接] 显示内连接:inner join(inner 可以省略) Select * ...
- (转)Hibernate中的多表操作
http://blog.csdn.net/yerenyuan_pku/article/details/70556208 Hibernate中的多表操作 在实际开发中,我们不可能只是简简单单地去操作单表 ...
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...
随机推荐
- C# Enum 进行逻辑运算
Enum定义 enum 全称(Enumeration),即一种由一组称为枚举数列表的命名常量组成的独特类型. 通常情况下,最好是在命名空间內直接定义 enum,以便该命名空间中所有的类都能够同样方便地 ...
- 嵌入式Linux驱动学习之路(二)u-boot体验
u-boot工程简介 现在的u-boot支持PowerPC.ARM.X86.MIPS体系结构的上百种开发板,已经称为功能最多.灵活性最强,并且开发最积极的开源Bootloader.目前由DENX的Wo ...
- Eclipse tooltip变黑的修正
- UIScrollView创建相册
1.设置滚动相册 1.1将存放图片数组传过来,及当前图片的索引 1.2在控制器中创建ScrollView,设置它的contentSize,contentOffset. 1.3通过传过来的图片数组创建U ...
- redis采用tcmalloc导致无法释放内存的问题
from:http://wangneng-168.iteye.com/blog/2100379 redis使用tcmalloc管理内存,当删除了redis的key后,通过redis的info命令查看内 ...
- Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. ...
- 031医疗项目-模块三:药品供应商目录模块——供货商药品目录查询功能----------sql补充知识
这个补充知识有一个点很有必要,视屏上的老师提出一点: 内链接关联查询: 如果表A和表B有一个外键关联 ,可以通过外键进行内链接查询 select dictinfo.*, dicttype.typena ...
- Windows 8.1 新增控件之 DatePicker
大年初一来介绍一个简单易用的DatePicker 控件,这个控件是新增的?印象里很早就有了啊,Anyway来看看Windows 8.1 里的DataPicker 有什么功能吧. 先来看看这个代码,很简 ...
- maven spring profile 协同
请在网上查相关的使用情景,这里直接上要点.另外,可能不只一种方法,但这里只有一种. 1.POM.XML片段,使web.xml文件中有关活跃spring profile的内容可以被maven自动替换 & ...
- logstash搭建日志追踪系统
前言 开始博客之前,首先说下10月份没写博客的原因 = =. 10月份赶上国庆,回了趟老家休息了下,回来后自己工作内容发生了点改变,开始搞一些小架构的东西以及研究一些新鲜东西,当时我听到这个消息真的是 ...