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 ...
随机推荐
- u3d_shader_surface_shader_6
主题:1.膨胀效果:2.surface shader实际生成的代码: o(︶︿︶)o 粘贴复制代码易,理解透彻代码难... 一:膨胀效果 1.在#pragma 编译指令里添加vertex:vert以 ...
- uboot 移植遇到的问题及解决方法(转)
http://blog.sina.com.cn/s/blog_988ec60801017iy3.html 一 在commond env_nand.c: In function 'saveenv': ...
- 一个简单的socket程序运行与抓包查看
为了熟悉socket编程,在ubuntu下运行了一个现有例子(Networking and Socket programming tutorial in C - CodeProject),并通过抓包查 ...
- html5游戏-追踪算法
追踪算法的原理:目标位置 - 当前位置 / 速度,即: dx = targetX - currentX / speed, dy = targetY - currentY / speed var get ...
- k-d tree 学习笔记
以下是一些奇怪的链接有兴趣的可以看看: https://blog.sengxian.com/algorithms/k-dimensional-tree http://zgjkt.blog.uoj.ac ...
- c语言:printf系列的函数
/** *----------------------------stdio.h--------------------------------------- * int printf(const c ...
- C语言:枚举类型
整数常量的符号名称... #include <stdio.h> enum _bool {false,true}; int main(){ enum colors { red, orange ...
- JavaScript Date对象 日期获取函数
JavaScript Date对象使用小例子: 运行结果: 总结: 1.尽管我们认为12月是第12个月份,但是JavaScript从0开始计算月份,所以月份11表示12月: 2.nowDate.set ...
- 布局 - layout
示例 <div id="cc" class="easyui-layout" style="width:600px;height:400px;&q ...
- requirejs:性能优化-及早并行加载
为了提高页面的性能,通常情况下,我们希望资源尽可能地早地并行加载.这里有两个要点,首先是尽早,其次是并行. 通过data-main方式加载要尽可能地避免,因为它让requirejs.业务代码不必要地串 ...