如何编写超类的Hibernate Criteria查询,并检查某些子类?假设我们有以下所有类都通过Hibernate-JPA映射:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Bar {
@Id
@Column(name = "id")
private Long id;
}
@Entity
@PrimaryKeyJoinColumn(name="bar_id")
public class Foo extends Bar {
}
@Entity
@PrimaryKeyJoinColumn(name="bar_id")
public class Goo extends Bar {
}
当编写这样的Criteria查询时,出于性能考虑,我希望对子类使用左联接:
getSession()
.createCriteria(Bar.class)
.createAlias("Foo", "foo", CriteriaSpecification.LEFT_JOIN)
.add(Restrictions.isNotNull("foo.bar_id"))
.list();
这失败了,因为关联路径“
Foo”显然不起作用,但是它将说明我想要的。还是有另一种方式进行这种查询?我需要在超类上执行查询。如果我会用SQL完成它,它将看起来像这样:
select b.*
from bar b left join foo f on f.bar_id = b.id
where f.bar_id is not null;
上面的SQL查询只是为了说明我的意思,我知道在这种特定情况下使用“普通”联接会更容易。
确实不清楚您想做什么。
首先,由于Foo继承自Bar,因此搜索Bar实例将自动返回Foo实例。Hibernate自己负责连接表。
第二:您的SQL查询确实很奇怪。您正在执行左联接(这意味着您正在搜索可能没有关联的foo的小节),但是foo.bar_id上的close位置也不为空。实际上,这构成了内部联接,可以重写为
select b.* from bar b inner join foo f on f.bar_id = b.id
如果您要搜索的是Foos,并且仅搜索Foos,则使用以Foo为根实体的条件:
getSession()
.createCriteria(Foo.class)
.list();
您将获得Foo实例,但是由于Foo扩展了Bar,因此这些Foo实例也是Bar实例。那就是继承。
现在,如果您要动态构建Criteria实例,并且意识到搜索必须只返回Foo实例,则必须使用隐式类属性:
Criteria c = getSession().createCriteria(Bar.class, "bar")
// ...
if (limitToFoos) {
c.add(Restrictions.eq("bar.class", Foo.class));
}
问题内容: 我有此查询,它运行良好 从此查询中,我从我的位置(这是我的第一张表)中选择所有3 KM的餐厅。 但是我需要从3Km中的食品接头中选择AVG等级。 该查询也运行完美: 但是我需要添加这两个查询,通过它们我可以选择所有那些食品接头及其等级AVG。 问题答案: 只需放置子查询,您将得到结果:
问题内容: 我从查询中得到了结果。 我的简单SQL是: 在Laravel源代码中,我编写了查询: 我得到了想要的结果,但我想以更好的方式编写它。 请告诉我编写此查询的正确和正确的方法。 问题答案: 同时显示此答案以及您的变体:
问题内容: 谁能帮助我获取下面提到的JPA查询的JPA标准查询。 问题答案: 假设Person与语言有关,这就是您在较早的Hibernate中所做的事情: 我第一次尝试使用JPA 2.0: 请让我知道这是否适合您。 编辑: 更新查询以仅使用一个呼叫。
需要实现sql查询,如: 如何使用QueryDSL编写这样的语句?(我没有使用任何JPA)。任何帮助/提示都非常感谢!
问题内容: 我想加入两个表CUSTMR和DEPRMNT。 我需要的是:LEFT OUTER JOIN内有两个或多个带有子查询的表的LEFT OUTER JOIN,如下所示: 表格:CUSTMR,DEPRMNT 查询为: 这里的子查询是: 是否可以在LEFT OUTER JOIN内编写这样的子查询? 在我的DB2数据库上运行此查询时出现错误。 问题答案: 您需要在子选择上使用“ correlatio
问题内容: 实际上,我有一个SQL查询可以很好地与数据库一起运行。但是,我的问题是我想在查询中编写该查询。 我的SQL查询是 我希望它由hibernate模板执行。 如何将其转换为查询? 问题答案: 如果要使用查询,则下面是hibernate查询的示例,但是在您的情况下,我们需要映射文件以查看实体之间的关联。希望下面的查询对您有所帮助。 要么