通过示例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

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

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

相关文章

微信小程序【WXSS 文件编译错误】unexpected “?“at pos 1的解决办法。

问题&#xff1a; 解决办法&#xff1a; 在控制台输入 openVendor() &#xff0c;清除里面的 wcsc wcsc.exe 然后重启工具。 如果涉及编码格式乱码的&#xff0c;请手动改为uft-8. 问题&#xff1a; 解决办法&#xff1a;

常见的一些威胁情报分析平台

在进行渗透过程中&#xff0c;也可以借助一些商用或者非商业平台来进行信息搜索及验证&#xff0c;主要针对邮箱、IP、域名、文件md5、apk文件等进行搜索&#xff0c;整理和完善线索信息。为了大家方便&#xff0c; 对目前公开的威胁情报平台进行搜集&#xff0c;在实际使用过…

ARM的编程模式和7种模式

ARM采用的是32位架构 ARM阅读 --Byte: 8 bits --Halfword: 16 bits(2 byte) 半字 --Word: 32 bits(4 byte) 大部分ARM core提供&#xff1a; core(核心) --ARM指令集&#xff08;32 bit&#xff09; &#xff08;有些占内存、时间快&#xff09; --…

CSDN博客专家申请的条件及规则

“博客专家”是CSDN给予质量较高、影响力较大的IT类博客的荣誉称号,代表了CSDN官方对其博客的肯定,同时博客专家也需要承担一定的社区责任。 申请规则:http://blog.csdn.net/experts/rule.html 申请地址:https://blog.csdn.net/experts/apply 申请条件: 注意事项: 专属福…

Java编译器API

本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的过程&#xff01; 在这里查看 &#xff01; 目录 1.简…

easyswoole数据库连接池_如何在 Swoole 中优雅的实现 MySQL 连接池

如何在 Swoole 中优雅的实现 MySQL 连接池一、为什么需要连接池 &#xff1f;数据库连接池指的是程序和数据库之间保持一定数量的连接不断开&#xff0c;并且各个请求的连接可以相互复用&#xff0c;减少重复连接数据库带来的资源消耗&#xff0c;一定程度上提高了程序的并发性…

CVE-2022-22965:Spring Framework远程代码执行漏洞

CVE-2022-22965&#xff1a;Spring Framework远程代码执行漏洞 本文仅为验证漏洞&#xff0c;在本地环境测试验证&#xff0c;无其它目的 漏洞编号&#xff1a; CVE-2022-22965 漏洞说明&#xff1a; Spring framework 是Spring 里面的一个基础开源框架&#xff0c;其目的是…

js中四种创建对象的方式

一、 1 var user new Object(); 2 user.first"Brad"; 3 user.last"Dayley"; 4 user.getName function( ) { return this.first " " this.last; } 二、 1 var user { 2 first: Brad, 3 last: Dayley, 4 getName: function( ) { return…

CSS系列讲解-总目录

总目录: 欢迎来到孙叫兽的《CSS系列讲解》,蓝色字体为传送门,点击进入即可。本专栏已完结,大前端专栏支持更新。 玩转CSS系列: 什么是CSS?你真的理解? CSS页面DEMO CSS基本语法? 如何玩转CSS的Id 和 Class选择器? 怎么玩转CSS内部样式表与外部样式表? 怎么样才…

红队信息收集自动化工具-水泽(ShuiZe)

红队信息收集自动化工具-水泽&#xff08;ShuiZe&#xff09; 文章目录 红队信息收集自动化工具-水泽&#xff08;ShuiZe&#xff09;0x01 介绍0x02 安装0x03 效果展示0x04 POC编写0x05 使用方法0x06 实现原理Web -> 存活探测0x07 项目地址 0x01 介绍 定位&#xff1a;协助…

注释不好吗?

前几天&#xff0c;我在有关Spring XML与注释的文章中运用了自己的原则&#xff0c;轻松进入了这个主题。 对于我目前正在编写此新应用程序的团队来说&#xff0c;这种简单的输入方式也是我不会使事情复杂化的方式&#xff0c;该应用程序的生产寿命可能为3-5年&#xff08;如果…

前端工程师应该达到什么水平,找工作薪资才比较高?

当然是水平越高&#xff0c;越容易找到工作&#xff0c;薪资越高在竞争这么激烈的2020年&#xff0c;就需要更加的努力&#xff0c;充实自己&#xff0c;让自己不被代替&#xff01;两条路&#xff1a;自学或者找培训班&#xff0c;找培训班的话&#xff0c;我推荐达内和传智播…

【转】使用JMeter对数据库做压力测试

作为一名开发人员&#xff0c;大多情况下都会认真的做好功能测试&#xff0c;但是却常常忽略了软件开发之后的压力测试&#xff0c;尤其是在面向大量用户同时使用的Web应用系统的开发过程&#xff0c;压力测试往往是不够充分的。近期我在一个求职招聘型的网站项目中就对压力测试…

python中的大数据品牌运营专业公司_国内最好的专业数据分析公司有哪些?

说说我知道的几家&#xff0c;都是在各自领域最好的。大数据平台星环&#xff0c;做Hadoop生态系列的大数据底层平台公司。也是国内唯一入选过Gartner魔力象限的大数据平台公司。Hadoop是开源的&#xff0c;星环主要做的是把Hadoop不稳定的部分优化&#xff0c;功能细化&#x…

POC以及day下载链接地址

POC以及day下载链接地址 https://github.com/Threekiii/Awesome-POC https://github.com/coffeehb/Some-PoC-oR-ExP https://github.com/PeiQi0/PeiQi-WIKI-Book https://github.com/luck-ying/Library-POC https://github.com/helloexp/0day https://github.com/BaizeSec/byl…

孙叫兽进阶之路之Gitlab的使用(图文教程)

简介&#xff1a; GitLab是一个利用 Ruby on Rails 开发的开源应用程序&#xff0c;实现一个自托管的Git项目仓库&#xff0c;可通过Web界面进行访问公开的或者私人项目。 它拥有与Github类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释。可以管理团队对仓库的…

PyQt4(使用ui)

1.使用qt designer设计界面&#xff0c;保存为test1.ui&#xff1a; 2.使用pyuic4 test1.ui -o ui.py生成ui代码。 3.程序载入。 import sys import ui from PyQt4 import QtCore, QtGuiclass MyWidget( QtGui.QWidget ):def __init__(self):super(MyWidget, self).__init__() …

docker升级步骤及注意事项

centos系统默认安装的docker版本是1.13版本&#xff0c;在安装部分镜像时可能出现兼容问题&#xff0c;本文通过实际操作总结Docker升级最新版本步骤及可能出现的问题&#xff0c;供各位参考。 环境&#xff1a;CentOS Linux release 7.6.1810 (Core) docker升级操作&#xf…

孙叫兽进阶之路之源代码配置管理过程(图文教程)

简介:配置管理(Configuration Management,CM)是通过技术或行政手段对软件产品及其开发过程和生命周期进行控制、规范的一系列措施。配置管理的目标是记录软件产品的演化过程,确保软件开发者在软件生命周期中各个阶段都能得到精确的产品配置。

进击的Objective-C--------Objective-C基础(-)

1.面向过程和面向对象(面向对象三大特性:封装 继承 多态)面向对象编程:分析解决问题组成的对象,从中抽象出类,调用方法(协调对象间的联系与通信),解决问题.面向过程编程:分析解决问题的步骤,实现函数,一次调用2类和对象:类和对象是面向对象的核心类:具有相同特征和行为的事物的…