在测试期间自动创建Spring Entity“权限”

时间:2010-08-14 18:35:25

标签: java hibernate spring orm spring-security

使用Spring Security&amp ;;进行单元测试时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创建所有必需的表吗?

  3. 由于

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

  

实际上,我不想使用自己的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测试将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