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

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

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

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)相关推荐

  1. 转:Hibernate中Criteria和DetachedCriteria的完整用法

    原文地址:http://blog.sina.com.cn/s/blog_667528fd0100rkrf.html 设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装.现在对 H ...

  2. hibernate示例_通过示例Hibernate–第1部分(删除孤儿)

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

  3. Hibernate本机SQL查询示例

    Welcome to the Hibernate Native SQL Query example tutorial. We looked into Hibernate Query Language ...

  4. Hibernate 马士兵 学习笔记

    1.  HelloWorld a)        Xml b)        Annotction 2.  Hibernate原理模拟-什么是O/RMapping以及为什么要有O/RMapping 3 ...

  5. Hibernate学习大全

    第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHelloWorld 7 第7课 ...

  6. Hibernate 学习教程

    第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHelloWorld 7 第7课 ...

  7. Hibernate查询语言

    第 15 章 HQL: Hibernate查询语言 第 15 章 HQL: Hibernate查询语言 上一页     下一页 第 15 章 HQL: Hibernate查询语言 Hibernate配 ...

  8. Hibernate 持久化状态、HQL语句大全(转)

    Hibernate 持久化状态 在Hibernate中,最核心的概念就是对PO的状态管理.一个PO有三种状态: 1.未被持久化的VO 此时就是一个内存对象VO,由JVM管理生命周期 2.已被持久化的P ...

  9. matlab初学者教程_初学者的Hibernate教程

    matlab初学者教程 Welcome to the Hibernate tutorial for Beginners. Hibernate is one of the most widely use ...

最新文章

  1. 国家智慧城市战略实施 保温材料等建材万亿市场待挖掘
  2. 第十一章 异常,日志,断言和调试
  3. 你真的会使用Glide吗?——Glide的高级用法
  4. 面试官问我:如何设计 QQ、微信等第三方账号登陆 ?
  5. TensorFlow之tf.nn.dropout():防止模型训练过程中的过拟合问题
  6. 启动postgres
  7. CF1251F-Red-White Fence【NTT】
  8. 《Go 语言程序设计》读书笔记 (五) 协程与通道
  9. 贝索斯将于7月5日卸任亚马逊CEO一职
  10. Http第三方接口实现/异步Http请求
  11. 基于asp.net317员工出差企业差旅管理系统
  12. 微信开通检测软件使用心得与技巧
  13. neo4j笔记(一)
  14. 张博涵清华大学_看了清华大学“神仙打架”,网友:我在这个世界上就是凑数的...
  15. 通过ip查看主机名和MAC地址的cmd命令
  16. 计算机中f4的应用,Excel中F4键的9个功能,提高90%工作效率
  17. 【ARM-8】MPIDR_EL1, Multiprocessor Affinity Register 多处理器关联寄存器
  18. EC-PCA: 利润中心会计流程设计和方案要点
  19. matlab 信号相位角,FFT信号处理后幅度、相角的问题
  20. 企业微信api接口调用-企业微信好友收发消息

热门文章

  1. array关于map,reduce,filter的用法
  2. 关于人脸识别最近浏览器打不开摄像头的解决方案
  3. bootstrap组件
  4. 2020蓝桥杯省赛---java---B---5(排序)
  5. 2020蓝桥杯省赛---java---B---6(分类计数)
  6. 35 岁程序员的独家面试经历
  7. springboot接收浏览器发送delete请求( method not allowed 405解决方法)
  8. ROC和AUC介绍以及如何计算AUC
  9. aws es方案_AWS Elasticsearch后模式
  10. oidc_使用Java EE和OIDC构建Java REST API