java - 具有集成安全性的 Hibernate 工具和 SQL Server

标签 java sql-server eclipse hibernate hibernate-tools

我在 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

  1. 该工具似乎忽略了项目设置 - 它拾取 jar,但不拾取 dll 的路径,并且
  2. 我不知道如何将带有 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/

相关文章:

java - SQLite 触发事件不起作用

java - 什么是 setElementConverter 以及它在 Selenium WebDriver 中如何工作?

sql-server - 触发器插入不适用于 insert..select from 语句

java - hybris java代码更改无需重新启动服务器

sql-server - 在sql函数中使用表名作为参数

sql - SQL Server 2014中数据发生变化时如何提取列名?

java - 来自父类(super class)的 protected 变量对于不同包中的子类不可见

eclipse - 乌龟相当于 'replace with latest from repository"?

android - Eclipse 中的 Logcat 在物理设备上不断清除

java - 上下文路径已附加