我在 eclipse (indigo) 中有一个项目,我使用 Hibernate 访问 SQL 数据。
我已经设置了几个类并使用注释手动映射到表。我已将驱动程序 jar 文件 (sqljdbc4.jar) 添加到构建路径,并输入包含 _sqljdbc_auth.dll_ 的文件夹路径作为驱动程序 jar 文件下的“ native 库位置”(为了支持集成安全性)。
我可以使用与 SQL Server 2012 的 JDBC 连接来访问数据,该连接使用集成安全性并且已在 hibernate.cfg.xml 中定义。
下一步,我想从剩余的 SQL 表自动生成类。因此,我从 JBOSS 站点安装了 Hibernate 工具,并尝试执行必要的步骤:我已经根据我的 hibernate 配置文件创建了一个控制台配置。现在,在我的项目的 Hibernate 视角中,我看到三个项目“配置”、“ session 工厂”和“数据库”。在“配置”的属性中,我看到我的连接 URL 和其他设置。
但是,当我单击“数据库”时,我收到错误org.hibernate.exception.JDBCConnectionException:正在获取数据库元数据
,该错误归结为引起的:java.lang.UnsatisfiedLinkError: java.library.path 中没有 sqljdbc_auth
- 该工具似乎忽略了项目设置 - 它拾取 jar,但不拾取 dll 的路径,并且
- 我不知道如何将带有 dll 的文件夹添加到 java.library.path
我尝试使用 set java.library.path
使用 hibernate.properties
文件并在控制台配置中引用此文件。这似乎完成了“配置”项中的一半工作,现在我可以看到 java.library.path
中包含的文件夹。但是,当我尝试单击“数据库”或配置代码生成配置时,它不会改变任何内容 - 仍然出现 no sqljdbc_auth in java.library.path
错误。
到目前为止,我发现的唯一解决方法是将我的 dll 放入默认显示在 java.library.path 中的任何文件夹中。然后我可以配置“代码生成配置”并创建类。但是,默认路径中的 64 位 dll 会被加载并导致冲突,例如当我需要来自另一个应用程序的 32 位版本时,因此我宁愿正确执行并根据需要进行引用。
也许可以在控制台配置中的类路径选项卡下添加路径,但这一切看起来都像它所说的那样 - “类路径”并说将我的文件夹添加到其中不会改变任何东西。
我想知道如何为 Hibernate 工具正确配置java.library.path。有任何想法吗?可能吗?
最佳答案
我也遇到过类似的问题。在一个普通的 Java 项目中,我可以设置 native 库或 add a Java VM runtime parameter 。使用 Hibernate Tools,我可以添加 sql server jdbc 驱动程序(jar 文件)。我发现让 Hibernate Tools 识别 DLL 的唯一方法是以下行添加到“eclipse.ini”文件中:
-Djava.library.path=C:\Program Files\Microsoft JDBC Driver 4.0 for SQL Server\sqljdbc_4.0\enu\auth\x64
请尝试此方法,将其调整到您计算机中的 DLL 位置。
P.S.:我正在使用 SQL Server Express 2012。Hibernate Tools 现在在 Eclipse 中显示数据库架构。但我对使用它还很陌生,所以我的 HQL 查询确实可以编译,但我仍然看不到执行它们的任何结果。
关于java - 具有集成安全性的 Hibernate 工具和 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21986711/