【问题标题】:Autocreate Spring Entity "authorities" during testing在测试期间自动创建 Spring Entity “权限”
【发布时间】:2011-03-29 21:59:09
【问题描述】:

当尝试使用 Spring Security 和 Hibernate 进行单元测试时,不会自动创建任何安全实体“用户”或“权限”。到目前为止,我所做的是编写一个触发生成适当表的“用户”bo。但是,我被当局困住了:

(由 http://java.dzone.com/articles/getting-started-spring 为 postgresql 建议)

  CREATE TABLE authorities
  (
    username character varying(50) NOT NULL,
    authority character varying(50) NOT NULL,
    CONSTRAINT fk_authorities_users FOREIGN KEY (username)
        REFERENCES users (username) MATCH SIMPLE
        ON UPDATE NO ACTION ON DELETE NO ACTION
  );
  1. 问题:对于 Hibernate/JPA2,创建表示此查询的 BO 的适当语法是什么?

  2. 问题:实际上,我不想使用自己的 BO 创建条目。有没有更好的方法让 Spring Security 或 Hibernate 在测试运行期间创建所有必需的表?

谢谢

【问题讨论】:

  • 代表实体的我的业务对象。我尝试的是一个具有两个属性(私有字符串用户名;私有字符串权限;)的类。第一个问题:在编译时,我得到一个错误的 id 错误。接下来我们有一个@ManyToOne 关系authorities.username::users.username,但我需要一个字符串类型,而不是字符串集合......这就是我卡住的地方

标签: java hibernate spring orm spring-security


【解决方案1】:

例如,将休眠属性hibernate.hbm2ddl.auto 设置为update。这应该让 hibernate 自动创建(和更新)需要的表。

<property name="hibernate.hbm2ddl.auto" value="update" />

【讨论】:

  • 嗨。谢谢你的建议。但是,我的 1. 问题是指 BO 代码 - 我不知道如何创建约束。例子?
【解决方案2】:

实际上,我不想使用自己的 BO 创建条目。有没有更好的方法让 Spring Security 或 Hibernate 在测试运行期间创建所有必需的表?

如果您不打算使用 Hibernate 与这些表进行交互,那么为它们设置实体确实没有什么意义。

因此,我的建议是将 Spring Security 表 creation script 放在 import.sql 文件中,并将此文件放在类路径的根目录下,Hibernate 将在模式导出后自动执行它。有关详细信息,请参阅Spring/Hibernate testing: Inserting test data after DDL creation(只需将您的 DDL 语句放在一行上)。


谢谢,Pascal,这正是我一直在寻找的,但是,它不起作用。我使用 maven 并将 import.sql 放入资源目录根目录(内容:CREATE TABLE justatest(aaa character varying(50) NOT NULL);)。我也设置了。运行 mvn test 将 import.sql 复制到目标目录...但没有任何反应。 logback[debug] 根本没有提到 import.sql。知道我哪里出错了吗? (Hibernate V 3.5.1-Final)

我在 Maven 中使用此功能,但无法重现您的问题。我将hbm2ddl.auto 设置为create,我的import.sql 文件位于src/test/resources 中,并且在运行测试时在模式导出结束时按预期执行。这是我得到的日志条目(使用 logback):

20:44:37.949 [main] INFO  o.h.tool.hbm2ddl.SchemaExport - Executing import script: /import.sql

【讨论】:

  • 谢谢,Pascal,这正是我一直在寻找的,但是,它不起作用。我使用 maven 并将 import.sql 放入资源目录根目录(内容:CREATE TABLE justatest(aaa character varying(50) NOT NULL);)。我还设置了 。运行 mvn test 将 import.sql 复制到目标目录...但没有任何反应。 logback[debug] 根本没有提到 import.sql。知道我哪里出错了吗? (Hibernate V 3.5.1-Final)
  • 嗨,帕斯卡,再次感谢。不幸的是,我无法让它工作。无论如何都不要紧。我在 Windows 站上工作,我将在 Linux 机器上再试一次,以确保它与文件系统无关。我知道,无论如何不应该,但我遇到了我生命中最奇怪的事情......
猜你喜欢
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 2013-04-17
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
相关资源
最近更新 更多