日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通过示例休眠–第2部分(DetachedCriteria)

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过示例休眠–第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

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的通过示例休眠–第2部分(DetachedCriteria)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。