通过示例休眠–第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,它不需要存在休眠会话。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2014编程之美初赛第二场

题目1 : 神奇的数列 时间限制:2000ms单点时限:1000ms内存限制:256MB描述 大神同学是一个热爱数字的孩子&#xff0c;她无时无刻不在思考生活与数学的联系。有一天&#xff0c;她发现其实公历的设计是有讲究的。 每4年就会多闰一天&#xff0c;每一百年又会有一年不是闰年&#…

usb大容量存储设备驱动_usb无法识别怎么办 如何解决usb识别故障【详细步骤】...

usb无法识别怎么办? 随着计算机硬件飞速发展&#xff0c;外围设备日益增多&#xff0c;键盘、鼠标等早已为人所共知&#xff0c;数码相机、MP3随身听接踵而至&#xff0c;这么多的设备&#xff0c;如何接入个人计算机?USB就是基于这个目的产生的。USB是一个使计算机周边设备连…

CSDN编程挑战——《交替字符串》

交替字符串 题目详情: 如果字符串str3能够由str1和str2中的字符按顺序交替形成&#xff0c;那么称str3为str1和str2的交替字符串。例如str1"abc"&#xff0c;str2"def"&#xff0c;那么"adbecf", "abcdef", "abdecf", "…

hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)

题目链接&#xff1a; Magic boy Bi Luo with his excited tree Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1037 Accepted Submission(s): 298 Problem DescriptionBi Luo is a magic boy, he also has …

Java EE过去,现在和云7

最近的JavaOne 2011的一个突出主题是下一个主要的Java EE 7版本。 正如主题发言中所述&#xff0c;有关工作正在进行中。 它将包含我们已经从先行者那里知道的28个规范以及一些新规范。 没人可以告诉您确切的号码&#xff0c;因为EE 7仅在“及时”完成时才会接受新的规范。 这意…

python cnn识别图像_笨方法学习CNN图像识别(一)—— 图片预处理

— 全文阅读5分钟 —在本文中&#xff0c;你将学习到以下内容&#xff1a;通过数据增强增加样本量调整图片大小便于网络训练前言图像识别的准备工作就是要对我们拿到手的样本图片进行预处理&#xff0c;具体就是数据增强和调整图片大小&#xff0c;这些准备工作都是为训练网络做…

随机数发生器

很多人喜欢用 rand()%n产生区间 [0,n]内的一个随机整数。姑且不论这样产生的整数是否仍然均匀分布&#xff0c;当 n大于 RAND_MAX 时&#xff0c;此法并不能得到期望的结果。由于RAND_MAX 很可能只是32767这么小&#xff0c;在使用此法时应当小心。 #include "stdio.h&quo…

Request和Response详解

转自&#xff1a;http://zhidao.baidu.com/link?url8BI0cjlcFdBSJKHTZlpo874eqtbTJoZfrh3miQgM_05RvSER8skPiBc1wSPZtXT8OGGCHfVXFAzAosa6E5HBl_ 内置对象request&#xff1a;请求对象request.getParameter("名字") 获得客户端输入的信息***************request.get…

将Maven与Ivy集成

问题是&#xff1a;您在Ivy存储库中&#xff08;只有那里&#xff09;有一些资源&#xff0c;您想在基于Maven的项目中使用这些资源。 可能的解决方案&#xff1a; 由于Ivy可以轻松使用Maven风格的存储库&#xff08;因此&#xff0c;您的Ivy客户端可以继续使用Ivy并进行一些微…

用python下载辞典

用python下载词源词典Etymoline Online Etymology Dictionary是最好的 English 词源词典&#xff0c;现在来说没有之一。但是&#xff0c;一直在PC上查单词有时不是很方便&#xff0c;遂就想怎么才能在手机上使用。现在的手机上的词典&#xff0c;除了BlueDict、MDict之外&…

程序员都用什么来记录知识_1年前的小五都用 Python 来做什么?

↑ 点击上方 “凹凸数据” 关注 星标 ~ 每天更新&#xff0c;干货不断 (多图预警)注&#xff1a;这是小五一年前在知乎的回答&#xff0c;当时还只有凹凸数读一个公众号&#xff0c;所以很多图片都会带有数读或者知乎的水印。作为一个菜鸟数据分析师&#xff0c;只会sqlpytho…

CSDN编程挑战——《高斯公式》

高斯公式 题目详情: 高斯在上小学时发明了等差数列求和公式:12..1005050。现在问题在于给你一个正整数n&#xff0c;问你他可以表示为多少种连续正整数之和&#xff1f;&#xff08;自身也算&#xff09;。 输入格式&#xff1a; 多组数据&#xff0c;每组数据一行&#xff0c…

SQL-行转列(PIVOT)实例1

--未旋转之前的查询结果 select s.Name ShiftName,h.BusinessEntityID,d.Name as DpartmentName from HumanResources.EmployeeDepartmentHistory h inner join HumanResources.Department d on h.DepartmentIDd.DepartmentIDinner join HumanResources.Shift s on s.ShiftIDh…

将MongoDB与Morphia结合使用

在过去的几年中&#xff0c; NoSQL数据库&#xff08;例如CouchDB&#xff0c;Cassandra和MongoDB&#xff09;在不需要运行传统RDBMS的语义和开销的应用程序中得到了普及。 我不会进入选择NoSQL数据库的设计决策&#xff0c;因为其他人已经做得很好&#xff0c;但是我将结合我…

webservice接口_webservice服务器端发票识别接口

关键词&#xff1a;发票识别 私有云发票识别 发票识别API接口 webservice发票识别平台发票&#xff0c;一个再也熟悉不过的财务往来凭证&#xff0c;录入发票&#xff0c;一项让多少财会人员头疼的工作。过去录入一张发票需要一个财会人员5分钟的时间&#xff0c;那么这个人在工…

二叉树学习——简单入门题

入门题一&#xff1a; 输入一颗二叉树&#xff0c;你的任务是按从上到下、从左到右的顺序输出各个节点的值。每个节点都按照从根节点到它的移动序列给出 &#xff08;L表示左&#xff0c;R表示右&#xff09;。在输入中&#xff0c;每个节点的左括号和右括号之间没有空格&#…

java8-4 多态的练习以及题目

1、/* 多态练习&#xff1a;猫狗案例*/ 1 class Animal {2 public void eat(){3 System.out.println("吃饭");4 }5 }6 7 class Dog extends Animal {8 public void eat() {9 System.out.println("狗吃肉"); 10 } 11 12 public void lookDoor() { 13 Syste…

一个简单的socket通信小demo

写了一个socket的程序&#xff0c;可以和本地的服务器进行通信&#xff0c;要先和服务器建立链接&#xff0c;然后发送登录信息&#xff0c;验证成功&#xff0c;就可以和服务器通信了 1 页面截图 2 点击链接服务器&#xff0c;可以链接服务器&#xff0c;服务器的ip地址为&…

Java并发教程– CountDownLatch

Java中的某些并发实用程序自然会比其他并发实用程序受到更多关注&#xff0c;因为它们可以解决通用问题而不是更具体的问题。 我们大多数人经常遇到执行程序服务和并发集合之类的事情。 其他实用程序不太常见&#xff0c;因此有时它们可​​能会使我们逃脱&#xff0c;但是请记…

汉仪尚巍手书可以商用吗_【商用车维修】夏天修空调可以撑起全年修车收入的一半,你会了吗?...

更多精彩&#xff0c;请点击上方蓝字关注我们&#xff01;车载空调是炎热的季节必不可少的利器&#xff0c;但用得多&#xff0c;毛病也多了起来&#xff0c;今天和大家分享一些空调系统的相关知识&#xff0c;助力修车师傅们来应对空调系统的相关故障问题。如何判断制冷系统的…