这些查询翻译器之间有什么区别(对于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带有基于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个替换ClassicQueryTranslatorFactory用ASTQueryTranslatorFactory。这是一个内部更改,在更改破坏您的应用程序之前,无需大声疾呼用户。
ClassicQueryTranslatorFactory
ASTQueryTranslatorFactory
在什么情况下我应该选择第一或第二?在什么情况下我不应该选择翻译之一?
默认情况下ASTQueryTranslatorFactory处于启用状态,仅当升级到版本3时任何查询中断时,才应考虑更改它。
再一次,它是一个过去的故事(2006年左右);hibernate的最新版本是4.1,并且查询转换器现在必须稳定。因此,有99%的人无需更改任何内容。