GVKun编程网logo

使用内部联接的简单hql命名查询(内连接查询的目的sql语句)

12

本文的目的是介绍使用内部联接的简单hql命名查询的详细情况,特别关注内连接查询的目的sql语句的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解使用内部联接的简单hql

本文的目的是介绍使用内部联接的简单hql命名查询的详细情况,特别关注内连接查询的目的sql语句的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解使用内部联接的简单hql命名查询的机会,同时也不会遗漏关于HQL休眠内部联接、HQL隐式联接在where子句中生成交叉联接,而不是内部联接、LINQ to SQL 中的内部联接的语法是什么?、LINQ to SQL中的内部联接的语法是什么?的知识。

本文目录一览:

使用内部联接的简单hql命名查询(内连接查询的目的sql语句)

使用内部联接的简单hql命名查询(内连接查询的目的sql语句)

我想在我的域/实体对象中执行以下操作:

@Entity@NamedQueries({@NamedQuery(name="favouriteCats", query="from Cat c inner join on UserCat uc where uc.isFavourtie = true and uc.user = :user")})public final class Cat extends BaseTable

这样我就可以在服务层中执行以下操作:

Query query = session.getNamedQuery("favouriteCats")query.setParameter(0, MyUser);return query.list();

但是,我在HQL中的语法不正确-大约十分钟后,我决定放弃正式文档并在此处询问…?我的usercat表是这样加入的:

@ManyToOne(cascade = CascadeType.MERGE)@JoinColumn(name="cat_fk", insertable=false, updatable=false)private cat

的SQL是这样,它在我的数据库命令提示符下工作正常:

select c.* from cat as c inner join usercat as uc on c.id = uc.cat_fk and uc.isFavourite = 1 //bit fieldand uc.user_fk = 74 //just user id

仅仅是我还是休眠文档比较痛苦,您是否发现自己经常想知道,编写普通的jdbc准备好的语句来填充pojos / domain objects /
dto’s会更快吗?

答案1

小编典典

我认为这可能对您有用,但我在这里猜测您的Usercat类:

select c from Usercat as uc inner join uc.cat as c where uc.isFavourtie = true and uc.user = :user

HQL休眠内部联接

HQL休眠内部联接

如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。

SELECT * FROM Employee e INNER JOIN Team t ON e.Id_team=t.Id_team

我在SQLServer2008中创建了实体类,

@Entity@Table(name="EMPLOYEE")public class Employee{    @Id @GeneratedValue    @Column(name="ID_EMPLOYEE")    private int id_employee;    @Column(name="SURNAME")    private String surname;    @Column(name="FIRSTNAME")    private String firstname;    @Column(name="ID_PROFESSION")    private int id_profession;    @Column(name="ID_BOSS")    private int id_boss;    @Column(name="HIRED_DATE")    private Date hired;    @Column(name="SALARY")    private double salary;    @Column(name="SALARY_ADD")    private double salary_add;    @Column(name="ID_TEAM")    private int id_team;    //setters and getters}@Entity@Table(name="TEAM")public class Team{    @Id @GeneratedValue    @Column(name="ID_TEAM")    private int id_team;    @Column(name="TEAMNAME")    private String teamname;    @Column(name="ADDRESS")    private String address;    //setters and getters}

我试图以多种方式构建有效的选择查询,但仍然无法正常工作。

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();Session session = sessionFactory.openSession();                 session.beginTransaction();String select = "FROM Employee e INNER JOIN Team t ON e.Id_team=t.Id_team";Query query = session.createQuery(select);List elist = query.list();session.getTransaction().commit();session.close();

实体有问题吗?

答案1

小编典典

连接只能在实体之间存在关联时使用。您的Employee实体不应将名称为id_team,类型int为的字段映射到列。它应该与Team实体具有ManyToOne关联,并映射为JoinColumn:

@ManyToOne@JoinColumn(name="ID_TEAM")private Team team;

然后,以下查询将完美运行:

select e from Employee e inner join e.team

这将加载所有员工,除了那些与任何团队无关的员工。

当然,对于作为映射为实体的某些其他表的外键的所有其他字段,当然也是如此(id_bossid_profession)。

现在是您阅读Hibernate文档的时候了,因为您错过了Hibernate的内容及其工作方式的极为重要的部分。

HQL隐式联接在where子句中生成交叉联接,而不是内部联接

HQL隐式联接在where子句中生成交叉联接,而不是内部联接

我正在使用Hibernate 3.6和MSSQL 2012。

执行此HQL时

select tbl.state from Property tbl where tbl.state = 1 and tbl.entity.state = 1 andtbl.entity.className = ''com....'' and tbl.fieldName = ''fieldName''

我正在获取此SQL

select property0_.State as col_0_0_ from Properties property0_ cross join Entitiesentity1_ where property0_.refEntityid=entity1_.id and property0_.State=1 andentity1_.State=1 and entity1_.ClassName=''com....'' and property0_.FieldName=''fieldName''

请注意 交叉连接 和where子句中的 附加条件* 。

根据Hibernate docs
https://docs.jboss.org/hibernate/core/3.5/reference/en/html/queryhql.html#queryhql-
joins-
forms

隐式连接应该生成为 内部连接

我注意到有一个打开的错误https://hibernate.atlassian.net/browse/HHH-7707,可能是指此问题,但没有人回答,并且已经开放了一年。

我将不胜感激有关此问题的任何信息。谢谢。

PS。我很清楚,使用隐式联接不是编写HQL的正确方法,但是我现在对此无能为力。

答案1

小编典典

您的联接是内部联接,但是使用的旧语法包括在where子句中添加条件:

where property0_.refEntityid=entity1_.id

而不是用

inner join Entities entity1_ on property0_.refEntityid=entity1_.id

结果是完全一样的。

只要您了解它们的作用,在HQL中使用隐式联接根本不是问题。

LINQ to SQL 中的内部联接的语法是什么?

LINQ to SQL 中的内部联接的语法是什么?

我正在编写一个 LINQ to SQL 语句,并且我正在使用 C# 中带有ON子句的普通内部连接的标准语法。

您如何在 LINQ to SQL 中表示以下内容:

select DealerContact.*
from Dealer 
inner join DealerContact on Dealer.DealerID = DealerContact.DealerID

LINQ to SQL中的内部联接的语法是什么?

LINQ to SQL中的内部联接的语法是什么?

我正在编写LINQ to SQL语句,并且正在使用C#中带有ON子句的常规内部联接的标准语法。

您如何在LINQ to SQL中表示以下内容:

select DealerContact.*
from Dealer 
inner join DealerContact on Dealer.DealerID = DealerContact.DealerID

#1楼

实际上,通常最好不要加入linq。 有导航属性时,一种非常简洁的方式来编写linq语句是:

from dealer in db.Dealers
from contact in dealer.DealerContacts
select new { whatever you need from dealer or contact }

它将转换为where子句:

SELECT <columns>
FROM Dealer, DealerContact
WHERE Dealer.DealerID = DealerContact.DealerID

#2楼

OperationDataContext odDataContext = new OperationDataContext();    
        var studentInfo = from student in odDataContext.STUDENTs
                          join course in odDataContext.COURSEs
                          on student.course_id equals course.course_id
                          select new { student.student_name, student.student_city, course.course_name, course.course_desc };

学生和课程表具有主键和外键关系的地方


#3楼

一个最好的例子

表名称: TBL_EmpTBL_Dep

var result = from emp in TBL_Emp join dep in TBL_Dep on emp.id=dep.id
select new
{
 emp.Name;
 emp.Address
 dep.Department_Name
}


foreach(char item in result)
 { // to do}

#4楼

var results = from c in db.Companies
              join cn in db.Countries on c.CountryID equals cn.ID
              join ct in db.Cities on c.CityID equals ct.ID
              join sect in db.Sectors on c.SectorID equals sect.ID
              where (c.CountryID == cn.ID) && (c.CityID == ct.ID) && (c.SectorID == company.SectorID) && (company.SectorID == sect.ID)
              select new { country = cn.Name, city = ct.Name, c.ID, c.Name, c.Address1, c.Address2, c.Address3, c.CountryID, c.CityID, c.Region, c.PostCode, c.Telephone, c.Website, c.SectorID, Status = (ContactStatus)c.StatusID, sector = sect.Name };


return results.ToList();

#5楼

使用LINQ联接执行内部联接。

var employeeInfo = from emp in db.Employees
                   join dept in db.Departments
                   on emp.Eid equals dept.Eid 
                   select new
                   {
                    emp.Ename,
                    dept.Dname,
                    emp.Elocation
                   };

今天关于使用内部联接的简单hql命名查询内连接查询的目的sql语句的讲解已经结束,谢谢您的阅读,如果想了解更多关于HQL休眠内部联接、HQL隐式联接在where子句中生成交叉联接,而不是内部联接、LINQ to SQL 中的内部联接的语法是什么?、LINQ to SQL中的内部联接的语法是什么?的相关知识,请在本站搜索。

本文标签: