Java Can';如果hsqlbd处于服务器模式,则不能在初始化数据库时创建架构

Java Can';如果hsqlbd处于服务器模式,则不能在初始化数据库时创建架构,java,spring,initialization,hsqldb,Java,Spring,Initialization,Hsqldb,我在内存中有Hsqldb 1) <jdbc:embedded-database id="idtSimulatorDataSource" type="HSQL"> <jdbc:script location="classpath:hsql/idt_schema.sql"/> </jdbc:embedded-database> 也许自动创建模式会更好,但我不知道如何创建 更新 我已经了解了如何启动db init脚本: DROP SCHEM

我在内存中有Hsqldb 1)

<jdbc:embedded-database id="idtSimulatorDataSource" type="HSQL">
        <jdbc:script location="classpath:hsql/idt_schema.sql"/>
    </jdbc:embedded-database>
也许自动创建模式会更好,但我不知道如何创建

更新 我已经了解了如何启动db init脚本:

DROP SCHEMA IF EXISTS simulators CASCADE;
CREATE SCHEMA SIMULATORS AUTHORIZATION sa -- not work yet
CREATE TABLE SIMULATORS.dirtyhack1();
jdbc:initializedatabasedatasource=“idtSimulatorDataSource”>

我也设置了

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

什么是特权

更新: 现在我真的很困惑。 我查看日志。见下文:

/C2/设置架构公共放置架构(如果存在模拟器级联) 创建模式模拟器授权SA创建表 SIMULATORS.dirtyhack()DISCONNECT/C3/SET SCHEMA PUBLIC DISCONNECT /C4/设置架构公共放置架构(如果存在模拟器级联) 创建模式模拟器授权SA断开连接/C5/设置模式 公共断开连接/C6/设置架构公共

但我最近更改了我的初始化脚本:

DROP SCHEMA IF EXISTS simulators CASCADE;
CREATE SCHEMA SIMULATORS AUTHORIZATION sa -- not work yet
CREATE TABLE SIMULATORS.dirtyhack1();
我的dirtyhack1()表在哪里??? 我删除了之前发布的所有内容

更新

我找到了原因。 此块在Hibernate创建其DDL操作后执行:

<jdbc:embedded-database id="idtSimulatorDataSource" type="HSQL">
        <jdbc:script location="classpath:hsql/idt_schema.sql"/>
    </jdbc:embedded-database>
这就是我没有找到dirtyhack1表的原因,也是我出错的原因。Init数据库刚刚删除了我的模拟器模式

所以有一个问题。如何在休眠之前启动init脚本?因为如果我不写第(1)行,那么我会得到错误的模式导出错误

您可以使用Spring创建数据库。大概是这样的:

new EmbeddedDatabaseBuilder().addScript("classpath:hsql/idt_schema.sql").build();

那么您就不需要Hibernate为您创建模式,因为它已经存在。

一个问题:后退一步,问问自己是否真的想执行一个脚本,在每次启动服务器时删除数据库?这是junit测试。为了确保我没有任何工件,最好清除db并通过Hibernate创建它
SQLSTATE Value:      42501  
Meaning: The authorization ID does not have the privilege to perform the specified operation on the identified object.
DROP SCHEMA IF EXISTS simulators CASCADE;
CREATE SCHEMA SIMULATORS AUTHORIZATION sa -- not work yet
CREATE TABLE SIMULATORS.dirtyhack1();
<jdbc:embedded-database id="idtSimulatorDataSource" type="HSQL">
        <jdbc:script location="classpath:hsql/idt_schema.sql"/>
    </jdbc:embedded-database>
public static Server server = new Server();

    @AfterClass
    public static void tearDown1() throws Exception {
        server.shutdown();
    }


    @BeforeClass
    public static void setUp() throws Exception {
        HsqlProperties p = new HsqlProperties();
        p.setProperty("server.database.0", "file:./idt_simulatordb");
        p.setProperty("server.dbname.0", "idt_simulatordb");
        p.setProperty("server.port", "9001");
        server.setProperties(p);
        server.start();

        Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9001/idt_simulatordb", "sa", "");
        conn.setAutoCommit(true);
        Statement st = conn.createStatement();    // statements
        String expression1 = "DROP SCHEMA IF EXISTS simulators CASCADE;\n";
        (1)String expression2 = "CREATE SCHEMA SIMULATORS AUTHORIZATION SA;";
        String expression3 = "CREATE TABLE SIMULATORS.dirtyhack1();";
        st.executeUpdate(expression1);    // run the query
        st.executeUpdate(expression2);    // run the query
        st.executeUpdate(expression3);    // run the query
        st.close();
        conn.close();
    }
new EmbeddedDatabaseBuilder().addScript("classpath:hsql/idt_schema.sql").build();