当前位置: 首页 > 面试题库 >

Hibernate。ClassicQueryTranslatorFactory与ASTQueryTranslatorFactory

濮阳翔
2023-03-14
问题内容

这些查询翻译器之间有什么区别(对于Hibernate用户而言,我的意思是不同)。互联网上的一些博客说基于ANTLR的翻译器更快。但是我认为,如果其中一个明显更好,那么Hibernate开发人员将删除另一个。那么..有什么区别?为什么我们都拥有它们?在什么情况下我应该选择第一还是第二?在什么情况下我不应该选择其中一位翻译?


问题答案:

这是 内部hibernate配置 ; 它将在升级到版本3时实施 。除非有确凿的理由,否则不必担心对其进行更改
。同样,对于最新版本,我认为您需要更改其默认值。但是,如果您愿意,可以按照以下说明进行测试以提高性能。

来自 Hibernate
Core迁移指南:3.0

;

查询语言变更

新的解析器-Hibernate3带有基于ANTLR的全新HQL / SQL查询转换器。但是,Hibernate
2.1查询解析器仍然可用。可以通过设置Hibernate属性hibernate.query.factory_class来选择查询解析器。对于新的查询解析器,可能的值为org.hibernate.hql.ast.ASTQueryTranslatorFactory;对于旧的解析器,可能的值为org.hibernate.hql.classic.ClassicQueryTranslatorFactory。我们正在努力使新的查询解析器支持Hibernate
2.1允许的所有查询。

但是,我们希望许多现有的应用程序在迁移阶段都需要使用Hibernate 2.1解析器。不再支持Hibernate
1.x语法“类bar.Foo中的from f”,请使用“ from bar.Foo as f”或“ from bar.Foo
f”。不要在已命名的HQL参数名称中使用点。注意:有一个已知的错误会影响使用theta样式的外部联接的方言(例如,OracleDialect for
Oracle
8i,TimesTen方言,Sybase11Dialect)。尝试使用支持ANSI风格的联接的方言(例如Oracle9Dialect),如果遇到问题,请使用旧的查询解析器。

这是有关此问题的论坛帖子和博客帖子。

现在问您的问题;

有什么区别?为什么我们都拥有它们?

由于在更改日志中说,hibernate3个替换ClassicQueryTranslatorFactoryASTQueryTranslatorFactory。这是一个内部更改,在更改破坏您的应用程序之前,无需大声疾呼用户。

在什么情况下我应该选择第一或第二?在什么情况下我不应该选择翻译之一?

默认情况下ASTQueryTranslatorFactory处于启用状态,仅当升级到版本3时任何查询中断时,才应考虑更改它。

再一次,它是一个过去的故事(2006年左右);hibernate的最新版本是4.1,并且查询转换器现在必须稳定。因此,有99%的人无需更改任何内容。



 类似资料:
  • 问题内容: 这些查询翻译器之间有什么区别(对于Hibernate用户而言,我的意思是不同)。互联网上的一些博客说基于ANTLR的翻译器更快。但是我认为,如果其中一个明显更好,那么Hibernate开发人员将删除另一个。那么..有什么区别?为什么我们都拥有它们?在什么情况下我应该选择第一还是第二?在什么情况下我不应该选择其中一位翻译? 问题答案: 这是 内部休眠配置 ; 它将在升级到版本3时实现 。

  • 问题内容: 我看不到“多对一”关系与“一对一”关系的架构有什么区别: 与 有什么区别吗? 问题答案: 它们在架构上看起来完全相同,但是在Hibernate Layer上有所不同。 如果尝试这样的操作: 一切都会好起来的。但是,保存后,如果您尝试获取订单: 当然,在两种情况下,您的Address类应该看起来有所不同。

  • 问题内容: 我一直在解决这个问题,而 Hibernate SessionFactory 和 JPA EntityManagerFactory的 区别在于JPA是标准的。您可以使用它而不必担心底层的ORM。但它在后台调用了底层的sessionFactory(如果我错了,请纠正我) 但是,如果有人知道他将来必须坚持使用hibernate作为ORM,那么他应该从这两个 工厂中 选择什么,为什么? 其次,

  • 问题内容: 我的项目使用spring3 jpa(hibernate),但是我在使用Hibernate Persistence类时遇到了问题……所以我无法正确创建我的entityManager,并且问题不断发生…… 我相信问题在我的pom.xml文件中!(如果这不是问题,那么也许在我的应用程序COntext.xml中?不这么认为,但他知道…) 这是pom.xml 现在错误输出: 您可以看到它是一个嵌

  • 问题内容: 我在父类和子类之间定义了双向的一对多关系。我正在寻找执行一个查询,以便我可以在bean中返回一个父对象及其子对象的子集。 我想要实现的输出是: 我想过滤父母的ID和孩子的年龄列。我尝试了多种查询组合以获取所需的输出。 以下内容很接近,但没有将子级分组到我定义的ParentChildWrapper bean中的集合中。我得到的结果是对象列表,每个孩子有1个实例与年龄过滤器匹配: 我还尝试

  • 问题内容: 我目前正在阅读有关实体关联的Hibernate文档,但遇到一些困难却难以理解。它在本质上做的区别和联系。尽管我在实际项目中使用了它们,但是我无法完全理解它们之间的差异。据我了解,如果一个表/一个实体与另一个实体有关联,则该关联应来自另一侧。那么,我们应该如何根据具体情况决定选择哪个呢?它又如何影响数据库/查询/结果?到处都有很好的例子吗? PS:我认为这与问题相关,如果有人可以解释关联