Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 3个表之间联接的Hibernate查询条件_Java_Hibernate_Hibernate Criteria - Fatal编程技术网

Java 3个表之间联接的Hibernate查询条件

Java 3个表之间联接的Hibernate查询条件,java,hibernate,hibernate-criteria,Java,Hibernate,Hibernate Criteria,我有一个sql查询: select * from A INNER JOIN B ON A.id = B.id INNER JOIN C ON B.id = C.id INNER JOIN D ON C.id = D.id where D.name = 'XYZ' and D.Sex = 'M' 我一直在尝试为上述sql提供hibernate查询条件,但遇到了一些问题。任何人都可以帮忙。关于您的问题,您希望执行笛卡尔连接,但标准不支持这一点,尽管您可以使用HQL执行,如下所示。还有一个类似

我有一个sql查询:

select * from A
INNER JOIN B
ON A.id = B.id
INNER JOIN C
ON B.id = C.id
INNER JOIN D
ON C.id = D.id
where D.name = 'XYZ'
   and D.Sex = 'M'

我一直在尝试为上述sql提供hibernate查询条件,但遇到了一些问题。任何人都可以帮忙。

关于您的问题,您希望执行笛卡尔连接,但标准不支持这一点,尽管您可以使用HQL执行,如下所示。还有一个类似的问题

使用HQL查询,您可以执行以下操作:

select a from 
   A a, 
   B b, 
   C c 
where 
   a.id = b.id and 
   c.id = b.id and 
   d.id = c.id and 
   d.name = 'XYZ' and 
   d.sex = 'M'
该查询用于常规hibernate查询:

Query query = session.createQuery(query); // <-- here you use the query above
List results = query.list();

Query Query=session.createQuery(查询);// 在您的问题上,您希望执行笛卡尔连接,标准不支持这一点,尽管您可以使用如下所示的HQL执行。还有一个类似的问题

使用HQL查询,您可以执行以下操作:

select a from 
   A a, 
   B b, 
   C c 
where 
   a.id = b.id and 
   c.id = b.id and 
   d.id = c.id and 
   d.name = 'XYZ' and 
   d.sex = 'M'
该查询用于常规hibernate查询:

Query query = session.createQuery(query); // <-- here you use the query above
List results = query.list();

Query Query=session.createQuery(查询);//你想要什么结果?A实例?Speath,是的..我需要来自AHibernate的实例都是关于或映射的。没有人仅仅通过查看SQL就知道您的实体是什么样子的。它可以简单到“从A.b.c.d.name='XYZ'和A.b.c.d.sex='M'”或者不可行,如果你没有适当的关系,结果会是什么?A实例?Speath,是的..我需要来自AHibernate的实例都是关于或映射的。没有人仅仅通过查看SQL就知道您的实体是什么样子的。它可以简单到“从其中A.b.c.d.name='XYZ'和A.b.c.d.sex='M'”,也可以不可行,如果您没有适当的关系,我必须使用hibernate的查询条件来执行此操作。对于ex-criteriac=session.createCriteria(Dokument.class,“Dokument”);c、 createAlias(“dokument.role”、“role”);//默认情况下的内部连接c.createAlias(“role.contact”、“contact”);c、 添加(Restrictions.eq(“contact.lastName”,“Test”));返回c.list();我必须使用hibernate的查询条件来实现这一点。对于ex-criteriac=session.createCriteria(Dokument.class,“Dokument”);c、 createAlias(“dokument.role”、“role”);//默认情况下的内部连接c.createAlias(“role.contact”、“contact”);c、 添加(Restrictions.eq(“contact.lastName”,“Test”));返回c.list();当我们说session.createAlias(“a.b”,b)…它会在a和b之间创建一个内部连接吗?条件有多不同。createAlias(“a.b”,“b”)就是说条件。createAlias(“b”,“b”)没有什么不同,但是,对createCriteria的初始调用给出了一个别名:createCriteria(a.class,“a”)。因此,进一步引用a实例中的字段需要使用“a.”前缀。实际上,我认为它们不必,但至少可以。我发现为每个实体(甚至根实体)指定一个别名更为清晰。是的,正如javadoc所指出的,它创建了一个内部连接。当我们说session.createAlias(“a.b”,b)…它会在a和b之间创建一个内部连接吗?标准有多不同。createAlias(“a.b”,“b”)只是说标准。createAlias(“b”,“b”)不会有什么不同,但是,对createCriteria的初始调用给出了一个别名:createCriteria(A.class,“A”)。因此,进一步引用A实例中的字段需要使用“A.”前缀。实际上,我认为它们不必使用,但至少可以。我发现为每个实体(甚至根实体)指定别名更为清晰。是的,正如javadoc所指出的,它创建了一个内部联接。