Cap*_*idd 54 configuration hibernate persistence.xml eclipselink dialect
当我们使用Hibernate配置数据源时,我们应该添加hibernate.dialect
属性(或者eclipselink.target-database
如果您使用的是EclipseLink).
我想知道方言的含义是什么?我根据Hibernate的文档配置了这个属性,但我不知道它的含义是什么.
Rav*_*viH 93
方言的意思是"语言的变体".我们知道,Hibernate与数据库无关.它可以用于不同的数据库.但是,数据库具有专有扩展/本机SQL变体,以及SQL标准实现的集合/子集.因此在某些时候hibernate必须使用特定于数据库的SQL.Hibernate使用"dialect"配置来了解您正在使用的数据库,以便它可以随时随地切换到特定于数据库的SQL生成器代码.
Mar*_*son 30
"具有讽刺意味的是,尽管编程接口是可移植的,但SQL语言却不是.尽管有许多尝试对其进行标准化,但编写任何复杂的SQL仍然很少会在两个主要数据库平台上保持不变.在SQL方言类似的地方,每个数据库的执行方式取决于查询的结构,在大多数情况下需要特定于供应商的调优."
..Proolen来自Pro JPA 2掌握Java Persistence API,第1章,第9页
因此,我们可能会将JDBC视为最终规范,它抽象出与数据库相关的所有内容,但事实并非如此.
引用JDBC规范,第4.4章,第20页:
驱动程序层可能会掩盖标准SQL:2003语法与数据源支持的本机方言之间的差异.
可能无法保证司机会这样做,因此我们应该提供方言以便有工作申请.在最佳情况下,应用程序可以正常工作,但如果持久性提供程序知道要使用哪种方言,则可能无法有效运行.在Hibernate的情况下,他将拒绝部署你的应用程序,除非你喂他的方言.
JDBC规范没有提到JPQL这个词.JDBC是一种标准化的数据库访问方式.去阅读这个JavaDoc,你会发现,一旦应用程序可以访问数据库,必须提供给JDBC兼容驱动程序的是vanilla = undecorated SQL.
值得注意的是,JPQL是一种查询语言,而不是数据定义语言(DDL).因此,即使我们可以使用JPQL提供JDBC驱动程序,在解析persistence.xml
文件和设置表的过程中对持久性提供程序也没用.
以下是Hibernate和EclipseLink关于如何在persistence.xml文件中指定Java DB方言的示例:
<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyTenSevenDialect"/>
<property name="eclipselink.target-database" value="JavaDB"/>
Run Code Online (Sandbox Code Playgroud)
从理论上讲,该属性尚未标准化,JPA 2.1规范中没有提到有关SQL方言的说法.所以我们运气不好,必须转向供应商特定的实证研究和文档.
Hibernate拒绝接受未指定属性的部署存档,该存档使存档可取消部署.Hibernate文档说:
始终将hibernate.dialect属性设置为数据库的正确org.hibernate.dialect.Dialect子类.
所以这很清楚.请注意,文档中列出的方言专门针对一个或另一个供应商.没有"通用"方言或类似的东西.鉴于该属性是成功部署的绝对要求,您可能希望捆绑Hibernate的WildFly应用程序服务器的文档应该说些什么,但事实并非如此.
另一方面,EclipseLink有点宽容.如果您未提供该属性,则部署部署(也不会发出警告).EclipseLink文档说:
使用eclipselink.target-database属性指定要使用的数据库,控制指定数据库的自定义操作和SQL生成.
谈话是关于"自定义操作和SQL生成",这意味着如果你问我它有点模糊.但有一件事是清楚的:他们并没有说财产是强制性的.另请注意,其中一个可用值是"Database",它表示"通用数据库"目标.嗯,那个"方言"会是什么?SQL 2.0 ?? 但话说回来,该属性被称为"目标数据库",而不是"方言",所以也许"数据库"转换为没有SQL根本lol.继续使用捆绑EclipseLink的GlassFish服务器.文档(第6-3页)说:
您可以指定可选的eclipselink.target-database属性以保证数据库类型正确.
因此,GlassFish认为该属性是"可选的",并且增值是我实际使用Java DB的"保证" - 如果我不知道的话.
复制粘贴谷歌上可以找到的任何内容并向上帝祈祷.
小智 21
Hibernate.dialect
property告诉Hibernate 为所选数据库生成适当的SQL语句.
可在此处找到可用方言列表:http://javamanikandan.blogspot.in/2014/05/sql-dialects-in-hibernate.html
RDBMS Dialect
DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9i/10g org.hibernate.dialect.Oracle9Dialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird org.hibernate.dialect.FirebirdDialect
Run Code Online (Sandbox Code Playgroud)
Dialect是数据库使用的SQL方言.
Hibernate 的SQL方言列表.
在hibernate.cfg.xml中提供它:
<hibernate-configuration>
<session-factory name="session-factory">
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
...
</session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)
或在属性文件中:
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
100891 次 |
最近记录: |