Hql以关联对象的某一属性来进行查询?

hxhazx 2014-06-18 11:42:14
主要是有这么个需求:

现有两个对象:1、订单对象Orders 2、用户对象Client
两者是Order(n) ----- Client(1) 多对一关系

在保存订单时,
1、如果订单归属于某一用户,则进行关联(表现到数据库中就是订单表中该条记录有外键且指向一个用户主键),字段为oneClient;
2、如果无归属关系,则不关联(表现到数据库中订单表中该条记录外键为null);但会在另外一个字段(如clientName)中存入一个用户名(单纯String)

现在我要对订单进行查询 ,想要的效果是,我给出一个用户名(如:XXX),如果订单关联了用户对象,且该用户对象的name等于XXX,则此订单符合查询要求;若无关联用户对象,则比较XXX与clientName是否相同,同则也条例查询要求

现在这个hql不会写了,现在只写成这样:
from Orders t where t.oneClient.name=XXX or t.clientName=XXX;
但一旦使用t.oneClient,即将两张以外键关系进行了表连接,这样连接后的大表直接就将无关联Client的订单记录过滤掉了,那上面提到的保存时第2个查询要求的记录就完全查不出来了。

如上此问题怎么解决呢?hql该怎么写!
...全文
609 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveunittesting 2014-06-18
  • 打赏
  • 举报
回复
对,就是用left join解决
xinlan1022 2014-06-18
  • 打赏
  • 举报
回复
hql也可以left join的吧
XiZhuXi 2014-06-18
  • 打赏
  • 举报
回复
select t from Orders t left join t.sendClient sc left join t.acceptClient ac where t.available=1 and (t.members.id=? or t.acceptmemb.id=?) and ( ac.clientname like ? or t.acceptCompany like ? ) and ( t.sendCompany like ? or sc.clientname like ? or t.members.membName like ?) order by t.createdAt desc
hxhazx 2014-06-18
  • 打赏
  • 举报
回复
引用 2 楼 yys79 的回复:
对,就是用left join解决
一般常规的用法格式是怎样的呢,我现在要左连接三张表啊 比如:from Orders t left join Client c1 left join Client c2 或者 :from Orders t left join t.sendClient sc left join t.acceptClient ac [注:sendClient、acceptClient都是Orders中关联的属性名] 哪个正确呢,我正在试验,如果大神知道,不防直接告诉小弟
HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - EventManager web应用程序 1.4.1. 编写基本的servlet 1.4.2. 处理与渲染 1.4.3. 部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators)(可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. hibernate-mapping 5.1.3. class 5.1.4. id 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-subclass) 5.1.17. 联合子类(union-subclass) 5.1.18. 连接(join) 5.1.19. 键(key) 5.1.20. 字段和规则元素(column and formula elements) 5.1.21. 引用(import) 5.1.22. any 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义值类型 5

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧