Java Can';如果hsqlbd处于服务器模式,则不能在初始化数据库时创建架构
我在内存中有Hsqldb 1)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
<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();