具有集成安全性的Hibernate工具和SQL服务器

时间:2014-02-24 11:41:06

标签: java sql-server eclipse hibernate hibernate-tools

我在eclipse(indigo)中有一个项目,我使用Hibernate访问SQL数据。

我已经设置了几个类并使用注释手动映射到表。我已将驱动程序jar文件(sqljdbc4.jar)添加到构建路径,并在驱动程序jar文件下输入了包含_sqljdbc_auth.dll_作为“本机库位置”的文件夹的路径(为了支持集成安全性)。

我可以使用JDBC连接到我的SQL Server 2012来访问数据,该连接使用集成安全性和我在 hibernate.cfg.xml 中定义的。

下一步,我想自动从剩余的SQL表中生成类。所以我从JBOSS站点安装了Hibernate工具,并且我正在尝试完成必要的步骤:我已经基于我的hibernate配置文件创建了一个控制台配置。现在在我的项目的Hibernate透视图中,我看到三个项目“Configuration”,“Session factory”和“Database”。在“配置”的属性中,我看到了我的连接URL和其他设置。

但是当我点击“数据库”时,我收到错误org.hibernate.exception.JDBCConnectionException: Getting database metadata,归结为Caused by: java.lang.UnsatisfiedLinkError: no sqljdbc_auth in java.library.path

  1. 似乎该工具忽略了项目设置 - 它拾取jar,但不是dll的路径,
  2. 我认为如何将带有dll的文件夹添加到 java.library.path
  3. 我尝试使用java.library.path文件集hibernate.properties并在控制台配置中引用此文件。这似乎是“配置”项目中的一半工作,现在我可以看到java.library.path中包含的文件夹。但是,当我尝试单击“数据库”或配置代码生成配置时,它不会改变任何内容 - 仍然是no sqljdbc_auth in java.library.path错误。

    到目前为止,我找到的唯一解决方法是将我的dll放在默认显示在 java.library.path 中的任何文件夹中。然后我可以配置“代码生成配置”并创建类。但是,默认路径中的64位dll会被加载并导致冲突,例如当我需要来自另一个应用程序的32位版本时,所以我宁愿正确地执行它并根据需要进行引用。

    也许可以在控制台配置中的 Classpath 选项卡下添加路径,但它看起来都是什么 - “classpath”并说我的文件夹添加到它不改变任何东西。

    我想知道如何为Hibernate工具正确配置 java.library.path 。有任何想法吗?有可能吗?

1 个答案:

答案 0 :(得分:0)

我遇到过类似的问题。在普通的Java项目中,我可以设置本机库或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查询会编译,但我仍然无法看到执行它们的任何结果。