所以上次我们帮助正义联盟有效地管理了他们的超级英雄。 今天,我们集中讨论“复仇者联盟”将如何使用冬眠的“分离标准”找出每个超级英雄的敌人,以保护他们的超级英雄。

您可以从此处下载工作示例。

在此示例中,我们仅考虑两个实体。 复仇者联盟和反派。 我们使用联接表在两者之间建立关系。 让我们看一下此示例中使用的域映射。

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,它不需要存在休眠会话。

我们的主要目标是找回小人所属的复仇者联盟。 请注意,这假设同一个小人不能是多个超级英雄的小人。 因此,我继续在下面给出根据传递的反派名称检索复仇者的方法。

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上的注释,以便创建此示例所需的表。

就是这样。

复仇者联盟现在可以避免冒险,因为他们拥有一个系统,可以将任何超级反派与联盟中的超级英雄联系起来。

一如既往地欢迎和赞赏您的意见和建议。

感谢您抽出宝贵的时间阅读!!!!

参考:“ 通过示例进行休眠–第2部分(DetachedCriteria)”,来自我们的JCG合作伙伴 Dinuka Arseculeratne,在“ 我的旅程” IT博客中

相关文章 :
  • 通过示例休眠–第1部分(删除孤儿)
  • 休眠陷阱
  • 休眠自动提交命令强制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

通过示例休眠–第2部分(DetachedCriteria)相关推荐

  1. 通过示例休眠–第1部分(删除孤儿)

    所以我想做一系列的冬眠例子,展示冬眠的各种特征. 在第一部分中,我想展示有关删除孤儿功能及其在故事情节中的使用方法. 因此,让我们开始:) 先决条件 : 为了尝试以下示例,您将需要以下提到的JAR文件 ...

  2. 带有Spring,Hibernate,Akka,Twitter Bootstrap,Apache Tiles和jQuery的Maven Web项目Kickstarter代码库...

    我很高兴将第二个项目上传到GitHub,以帮助人们尽快开始Java Web App开发. 我正在与Apache License 2.0共享此代码. 这是相同的网址: https://github.co ...

  3. 通过示例Hibernate–第2部分(DetachedCriteria)

    所以上次我们帮助正义联盟有效地管理了他们的超级英雄. 今天,我们集中讨论"复仇者联盟"将如何使用冬眠的"分离标准"找出每个超级英雄的敌人,以保护他们的超级英雄. ...

  4. java sleep原理_Java线程休眠(sleep)示例

    java.lang.Thread的sleep()方法能使当前线程暂停运行一段时间(单位毫秒).需要注意的是,sleep()方法的参数不能为负,否则会抛出IllegalArgumentException ...

  5. Go 学习笔记(48)— Go 标准库之 time (获取时/分/秒的单位值、标准时间和Unix时间转换、字符串时间和Time类型转换、时区转换、时间的加减/休眠)

    1. 概要说明 import "time" time 包提供了时间的显示和测量用的函数.日历的计算采用的是公历. Go 提供以下几种时间类型: 时间点 Time 时间段 Durat ...

  6. ncurse界面编程多线程示例

    linux ncurses界面编程网上资料很多,这里不再详述,这里只给一个例子.该示例给出了一个左右跳动的字符串数组景象: //Compile: gcc -g ncurses_demo.c -o nc ...

  7. python threading模块多线程源码示例(一)

    使用python模块threading来编写多线程程序的基本思想就是, 在threading.Thread类的基础上派生出一个子类,  将业务逻辑在该子类的run函数中实现, 创建该子类对象的线程池, ...

  8. python积分管理系统_python实现每天自动签到领积分的示例代码

    自动签到的python脚本源码 新建一个python文件,checkin.py,保存到电脑上某个位置,我这里保存到的是E:\pyproject\checkin.py # 引入3个包 from sele ...

  9. Hibernate的DetachedCriteria使用(含Criteria)

    1.背景了解:Hibernate的三种查询方式 Hibernate总的来说共有三种查询方式:HQL.QBC和SQL三种,这里做简单的概念介绍,不详细进行展开. 1.1 HQL(Hibernate Qu ...

最新文章

  1. 【转】每天一个linux命令(31): /etc/group文件详解
  2. delphi中设置系统时间方法
  3. Java配置dbeaver_ubuntu我的工具安装 eclipse、dbeaver、jdk、kdesvn、
  4. java通过POI技术将html转成word
  5. html5%3cimg%3e属性,汽车之家存储型xss可大规模获取任何用户cookie
  6. 用SegNet进行室内布局语义分割
  7. VS报:dll标记为系统必备组件,必须对其进行强签名错误
  8. 使用命令行提取微软补丁文件
  9. 笔记:盖洛普《伟大管理的12要素》中的12原则
  10. Spring RestTemplate 实践
  11. Unity 接讯飞语音SDK
  12. 社交电商平台的消费返利模式——共享购
  13. iPad pro能运行c语言吗,办公实战 iPad Pro还是洗洗睡吧_平板电脑评测-中关村在线...
  14. 职场丨一年前我月薪两万被叫老总,如今在美团送外卖
  15. Python随机车牌;京牌摇号⼩程序
  16. 【游戏开发】unity教程4 打飞碟小游戏
  17. 【FacebookSDK学习笔记】登录Facebook
  18. 我国工业自动化市场现状分析报告
  19. 光谱成像技术用于河北鸭梨的物理损伤检测
  20. 【游戏编程扯淡精粹】UE5 蓝图

热门文章

  1. exchanger_如何通过示例在Java中使用Exchanger
  2. jdk8 获取上一个月时间_JDK 10:FutureTask获取一个toString()
  3. java lambda::_基准测试:Java 8 Lambda和流如何使您的代码慢5倍
  4. vue 侦听器侦听对象属性_不删除侦听器–使用ListenerHandles
  5. input发送a.jax_JAX-RS 2.0:服务器端处理管道
  6. hibernate 序列_Hibernate身份,序列和表(序列)生成器
  7. 使用React Native和Spring Boot构建一个移动应用
  8. Java 11:新的HTTP客户端API
  9. OCA第7部分的Java难题
  10. 具有MicroProfile配置的可配置JAX-RS ExceptionMapper