本文的目的是介绍使用内部联接的简单hql命名查询的详细情况,特别关注内连接查询的目的sql语句的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解使用内部联接的简单hql
本文的目的是介绍使用内部联接的简单hql命名查询的详细情况,特别关注内连接查询的目的sql语句的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解使用内部联接的简单hql命名查询的机会,同时也不会遗漏关于HQL休眠内部联接、HQL隐式联接在where子句中生成交叉联接,而不是内部联接、LINQ to SQL 中的内部联接的语法是什么?、LINQ to SQL中的内部联接的语法是什么?的知识。
本文目录一览:- 使用内部联接的简单hql命名查询(内连接查询的目的sql语句)
- HQL休眠内部联接
- HQL隐式联接在where子句中生成交叉联接,而不是内部联接
- LINQ to SQL 中的内部联接的语法是什么?
- LINQ to 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休眠内部联接
如何在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_boss
,id_profession
)。
现在是您阅读Hibernate文档的时候了,因为您错过了Hibernate的内容及其工作方式的极为重要的部分。
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 语句,并且我正在使用 C# 中带有ON
子句的普通内部连接的标准语法。
您如何在 LINQ to SQL 中表示以下内容:
select DealerContact.*
from Dealer
inner join DealerContact on Dealer.DealerID = DealerContact.DealerID
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_Emp
和TBL_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中的内部联接的语法是什么?的相关知识,请在本站搜索。
本文标签: