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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hibernate 别名_Hibernate:在sqlRestriction上使用联接表别名

發布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate 别名_Hibernate:在sqlRestriction上使用联接表别名 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

hibernate 別名

如果在復雜查詢的情況下使用Hibernate模式,則需要使用sql。
因此,sqlRestrictions可以解決。 但是,對聯接表別名使用sql限制有點棘手。

將有三個表:

  • 公司表。
  • 員工表。
    每個員工都屬于一個公司,因此我們有多對一的關系。
  • 福利表。
    每個公司都有很多好處,因此我們有一對多的關系。

本示例將使用Postgresql。

CREATE DATABASE example;CREATE TABLE company (company_id SERIAL PRIMARY KEY,name TEXT NOT NULL );CREATE TABLE employee (employee_id SERIAL PRIMARY KEY,first_name TEXT,last_name TEXT,company_id integer,CONSTRAINT fk_company FOREIGN KEY (company_id)REFERENCES company (company_id) MATCH SIMPLE );CREATE TABLE benefit (benefit_id SERIAL PRIMARY KEY,name TEXT,company_id integer,CONSTRAINT fk_company FOREIGN KEY (company_id)REFERENCES company (company_id) MATCH SIMPLE );INSERT INTO company (name) VALUES ('TestCompany'); INSERT INTO employee (first_name, last_name, company_id) VALUES ('Emmanouil','Gkatziouras',1); INSERT INTO benefit (name,company_id) VALUES ('gym',1);

JPA將用于實體配置。

公司實體。

package com.gkatzioura.example.entity;import javax.persistence.*; import java.util.HashSet; import java.util.Set;/*** Created by gkatziourasemmanouil on 7/12/15.*/ @Entity @Table(name = "company") public class Company {@Id@GeneratedValue@Column(name = "company_id")private Long Id;@ColumnString name;@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY,mappedBy = "company")private Set<Benefit> benefits = new HashSet<Benefit>();public Long getId() {return Id;}public void setId(Long id) {Id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Benefit> getBenefits() {return benefits;}public void setBenefits(Set<Benefit> benefits) {this.benefits = benefits;} }

員工實體。

package com.gkatzioura.example.entity;import javax.persistence.*;/*** Created by gkatziourasemmanouil on 8/2/15.*/ @Entity @Table(name = "employee") public class Employee {@Id@GeneratedValue@Column(name = "employee_id")private Long id;@Column(name = "first_name")private String firstName;@Column(name = "last_name")private String lastName;@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)@JoinColumn(name = "company_id",referencedColumnName = "company_id")private Company company;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public Company getCompany() {return company;}public void setCompany(Company company) {this.company = company;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;} }

利益實體。

package com.gkatzioura.example.entity;import javax.persistence.*;/*** Created by gkatziourasemmanouil on 8/9/15.*/@Entity @Table(name = "benefit") public class Benefit {@Id@GeneratedValue@Column(name = "benefit_id")private Long id;@Column(name = "name")private String name;@ManyToOne@JoinColumn(name = "company_id")private Company company;public String getName() {return name;}public void setName(String name) {this.name = name;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public Company getCompany() {return company;}public void setCompany(Company company) {this.company = company;} }

Hibernate配置

<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- Database connection settings --><property name="connection.driver_class">org.postgresql.Driver</property><property name="connection.url">jdbc:postgresql://127.0.0.1:5432/example</property><property name="connection.username">postgres</property><property name="connection.password">postgres</property><!-- JDBC connection pool (use the built-in) --><property name="connection.pool_size">1</property><!-- SQL dialect --><property name="dialect">org.hibernate.dialect.PostgreSQL9Dialect</property><!-- Enable Hibernate's automatic session context management --><property name="current_session_context_class">thread</property><!-- Disable the second-level cache --><property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property><!-- Echo all executed SQL to stdout --><property name="show_sql">true</property><!-- Drop and re-create the database schema on startup --><property name="hbm2ddl.auto">update</property><mapping class="com.gkatzioura.example.entity.Company"/><mapping class="com.gkatzioura.example.entity.Employee"/><mapping class="com.gkatzioura.example.entity.Benefit"/></session-factory></hibernate-configuration>

創建Hibernate會話工廠的主類

package com.gkatzioura.example;import com.gkatzioura.example.entity.Employee; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.criterion.Restrictions; import org.hibernate.sql.JoinType; import org.hibernate.type.StringType; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory;/*** Created by gkatziourasemmanouil on 7/12/15.*/ public class Main {private static SessionFactory sessionFactory;private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(SessionFactory.class);public static void main(String args[]) {sessionFactory = buildSessionFactory();getByCompanyAndBenefit("TestCompany","gym");sessionFactory.close();}public static SessionFactory buildSessionFactory() {return new Configuration().configure().buildSessionFactory();}}

假設我們要通過公司名稱和特定的福利名稱來提取員工,我們將添加getByCompanyAndBenefit函數。

公司名稱將通過常規限制進行過濾。

但是,福利名稱將由sqlRestriction過濾。

private static List<Employee> getByCompanyAndBenefit(String companyName,String benefitName) {Session session = sessionFactory.openSession();Criteria criteria = session.createCriteria(Employee.class,"employee");Criteria companyCriteria = criteria.createCriteria("company",JoinType.INNER_JOIN);companyCriteria.add(Restrictions.eq("name", companyName));Criteria benefitsAlias = companyCriteria.createCriteria("benefits",JoinType.LEFT_OUTER_JOIN);benefitsAlias.add(Restrictions.sqlRestriction("{alias}.name = ?",benefitName, StringType.INSTANCE));List<Employee> employees = criteria.list();for(Employee employee:employees) {LOGGER.error("The employee is "+employee.getFirstName());}session.close();return employees;}

對關系使用條件的createCriteria函數時,{alias}表示新條件的關聯實體。

對于使用createAlias之后檢索到的條件類,這是不可能的。

最后但并非最不重要的gradle文件。

group 'com.gkatzioura.example' version '1.0-SNAPSHOT'apply plugin: 'application' apply plugin: 'java' apply plugin: 'idea'mainClassName = "com.gkatzioura.example.Main"sourceCompatibility = 1.8repositories {mavenLocal()mavenCentral() }dependencies {testCompile group: 'junit', name: 'junit', version: '4.11'compile 'org.ancoron.postgresql:org.postgresql.net:9.1.901.jdbc4.1-rc9'compile 'org.slf4j:slf4j-api:1.6.6'compile 'ch.qos.logback:logback-classic:1.0.13'compile 'org.hibernate:hibernate-core:4.3.6.Final'compile 'org.hibernate:hibernate-entitymanager:4.3.6.Final'compile 'org.hibernate:hibernate-validator:5.1.1.Final'compile 'dom4j:dom4j:1.6.1'compile 'org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final'testCompile group: 'junit', name: 'junit', version:'3.8.1'}

翻譯自: https://www.javacodegeeks.com/2015/08/hibernate-use-join-table-alias-on-sqlrestriction.html

hibernate 別名

總結

以上是生活随笔為你收集整理的hibernate 别名_Hibernate:在sqlRestriction上使用联接表别名的全部內容,希望文章能夠幫你解決所遇到的問題。

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