通过示例Hibernate–第2部分(DetachedCriteria)
您可以从此处下载工作示例。
在此示例中,我们仅考虑两个实体。 复仇者联盟和反派。 我们使用联接表在两者之间建立关系。 让我们看一下此示例中使用的域映射。
package com.avengers.domain;import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;import org.hibernate.annotations.Type;/*** The domain class representing each member of the avengers* * @author Dinuka.Arseculeratne* */
@Entity
@Table(name = "Avengers")
public class Avenger implements Serializable {/*** The primary key of the Avenger table*/@Id@GeneratedValue(strategy = GenerationType.AUTO)@Column(name = "avenger_id")private Long avengerId;/*** The name of the avenger member*/@Column(name = "avenger_name")private String avengerName;/*** A flag which holds whether the avenger's powers are awesome*/@Type(type = "yes_no")@Column(name = "is_awesome")private boolean isAwesome;/*** The list of enemies the avenger has*/@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)@JoinTable(name = "AVENGERS_AND_VILLAINS", joinColumns = { @JoinColumn(name = "avenger_id") }, inverseJoinColumns = { @JoinColumn(name = "villain_id") })private List<Villain> enemyList = new ArrayList<Villain>();public Long getAvengerId() {return avengerId;}public void setAvengerId(Long avengerId) {this.avengerId = avengerId;}public String getAvengerName() {return avengerName;}public void setAvengerName(String avengerName) {this.avengerName = avengerName;}public boolean isAwesome() {return isAwesome;}public void setAwesome(boolean isAwesome) {this.isAwesome = isAwesome;}public List<Villain> getEnemyList() {return enemyList;}public void addEnemy(Villain enemy) {enemyList.add(enemy);}@Overridepublic String toString() {return "Avenger [avengerId=" + avengerId + ", avengerName="+ avengerName + ", isAwesome=" + isAwesome + ", enemyList="+ enemyList + "]";}}
此类映射一个复仇者。 为了使本示例尽可能简单和简短,我使用了最少的字段。 恶棍域如下所示;
package com.avengers.domain;import java.io.Serializable;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;import org.hibernate.annotations.Type;/*** This class represents the Villain forces against the avengers* * @author Dinuka.Arseculeratne* */
@Entity
@Table(name = "Villains")
public class Villain implements Serializable {/*** The primary key of the Enemy table*/@Id@GeneratedValue(strategy = GenerationType.AUTO)@Column(name = "villain_id")private Long villaiId;/*** The name of the enemy*/@Column(name = "villain_name")private String villainName;/*** A flag which checks whether the villain is super awesome*/@Type(type = "yes_no")@Column(name = "is_awesome")private boolean isAwesome;public Long getVillaidId() {return villaiId;}public void setVillaidId(Long villaidId) {this.villaiId = villaidId;}public String getVillainName() {return villainName;}public void setVillainName(String villainName) {this.villainName = villainName;}public boolean isAwesome() {return isAwesome;}public void setAwesome(boolean isAwesome) {this.isAwesome = isAwesome;}@Overridepublic String toString() {return "Villain [villaiId=" + villaiId + ", villainName=" + villainName+ ", isAwesome=" + isAwesome + "]";}}
好的,现在我们已经定义了域,让我们看看如何使用DetachedCriteria进行数据检索。 我在这里使用了DetachedCriteria,因为复仇者联盟非常具体,并说他们不希望与Hibernate会话有关 ,因此我使用了DetachedCriteria,它不需要出现Hibernate会话。
我们的主要目标是找回小人所属的《复仇者联盟》。 请注意,这假设同一个小人不能是多个超级英雄的小人。 因此,我在下面给出了根据传递的反派名称检索复仇者的方法。
public Avenger retrieveAvengerByVillainName(String villainName) {Avenger avenger = null;/*** Selected a detached criteria so we do not need a session to run it* within.*/DetachedCriteria criteria = DetachedCriteria.forClass(Avenger.class);/*** Here we are doing an inner join with the Villain table in order to do* a name comparison with the villainName passed in as a method* parameter*/DetachedCriteria villainCriteria = criteria.createCriteria("enemyList");villainCriteria.add(Restrictions.eq("villainName", villainName));villainCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);@SuppressWarnings("unchecked")List<Avenger> avengerList = getHibernateTemplate().findByCriteria(criteria);if (!avengerList.isEmpty()) {avenger = avengerList.get(0);getHibernateTemplate().initialize(avenger.getEnemyList());}return avenger;}
在此方法中,我们要做的是首先为主类创建一个条件,在本例中为Avenger.class 。 然后,我们需要与Villain表进行联接,因此,我们将使用我们在Avenger域类中定义的列表名称,从主要条件中创建一个子条件。
然后,将反派域名的属性与传入的反派名字相等即可。
Criteria API的强大功能使您可以轻松创建动态查询,如果我们要使用纯HQL,这将很麻烦,而纯HQL需要大量的字符串连接才能实现。
附带了一个名为AvengerTest.java的示例测试类,其附件位于最顶部。 请注意,您需要删除avenger-context.xml上的注释,以便创建此示例所需的表。
就是这样。
复仇者联盟现在可以避免冒险,因为他们拥有一个系统,可以将任何超级反派与联盟中的超级英雄联系起来。
一如既往地欢迎和赞赏您的意见和建议。
感谢您抽出宝贵的时间阅读!!!!
参考:“ 通过示例进行Hibernate–第2部分(DetachedCriteria)”,来自JCG合作伙伴 Dinuka Arseculeratne ,来自“ 我的旅程” IT博客。
- 通过示例Hibernate–第1部分(删除孤儿)
- Hibernate陷阱
- Hibernate自动提交命令强制MySQL在过多的磁盘I / O中运行
- DataNucleus 3.0与Hibernate 3.5
- Hibernate映射集合性能问题
- Spring MVC3 Hibernate CRUD示例应用程序
- Java教程和Android教程列表
翻译自: https://www.javacodegeeks.com/2011/11/hibernate-by-example-part-2.html
通过示例Hibernate–第2部分(DetachedCriteria)相关推荐
- 转:Hibernate中Criteria和DetachedCriteria的完整用法
原文地址:http://blog.sina.com.cn/s/blog_667528fd0100rkrf.html 设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装.现在对 H ...
- hibernate示例_通过示例Hibernate–第1部分(删除孤儿)
hibernate示例 所以我想做一系列的冬眠例子,展示冬眠的各种特征. 在第一部分中,我想展示有关删除孤儿功能及其在故事情节中的使用方式. 因此,让我们开始:) 先决条件 : 为了尝试以下示例,您将 ...
- Hibernate本机SQL查询示例
Welcome to the Hibernate Native SQL Query example tutorial. We looked into Hibernate Query Language ...
- Hibernate 马士兵 学习笔记
1. HelloWorld a) Xml b) Annotction 2. Hibernate原理模拟-什么是O/RMapping以及为什么要有O/RMapping 3 ...
- Hibernate学习大全
第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHelloWorld 7 第7课 ...
- Hibernate 学习教程
第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHelloWorld 7 第7课 ...
- Hibernate查询语言
第 15 章 HQL: Hibernate查询语言 第 15 章 HQL: Hibernate查询语言 上一页 下一页 第 15 章 HQL: Hibernate查询语言 Hibernate配 ...
- Hibernate 持久化状态、HQL语句大全(转)
Hibernate 持久化状态 在Hibernate中,最核心的概念就是对PO的状态管理.一个PO有三种状态: 1.未被持久化的VO 此时就是一个内存对象VO,由JVM管理生命周期 2.已被持久化的P ...
- matlab初学者教程_初学者的Hibernate教程
matlab初学者教程 Welcome to the Hibernate tutorial for Beginners. Hibernate is one of the most widely use ...
最新文章
- 国家智慧城市战略实施 保温材料等建材万亿市场待挖掘
- 第十一章 异常,日志,断言和调试
- 你真的会使用Glide吗?——Glide的高级用法
- 面试官问我:如何设计 QQ、微信等第三方账号登陆 ?
- TensorFlow之tf.nn.dropout():防止模型训练过程中的过拟合问题
- 启动postgres
- CF1251F-Red-White Fence【NTT】
- 《Go 语言程序设计》读书笔记 (五) 协程与通道
- 贝索斯将于7月5日卸任亚马逊CEO一职
- Http第三方接口实现/异步Http请求
- 基于asp.net317员工出差企业差旅管理系统
- 微信开通检测软件使用心得与技巧
- neo4j笔记(一)
- 张博涵清华大学_看了清华大学“神仙打架”,网友:我在这个世界上就是凑数的...
- 通过ip查看主机名和MAC地址的cmd命令
- 计算机中f4的应用,Excel中F4键的9个功能,提高90%工作效率
- 【ARM-8】MPIDR_EL1, Multiprocessor Affinity Register 多处理器关联寄存器
- EC-PCA: 利润中心会计流程设计和方案要点
- matlab 信号相位角,FFT信号处理后幅度、相角的问题
- 企业微信api接口调用-企业微信好友收发消息
热门文章
- array关于map,reduce,filter的用法
- 关于人脸识别最近浏览器打不开摄像头的解决方案
- bootstrap组件
- 2020蓝桥杯省赛---java---B---5(排序)
- 2020蓝桥杯省赛---java---B---6(分类计数)
- 35 岁程序员的独家面试经历
- springboot接收浏览器发送delete请求( method not allowed 405解决方法)
- ROC和AUC介绍以及如何计算AUC
- aws es方案_AWS Elasticsearch后模式
- oidc_使用Java EE和OIDC构建Java REST API