首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Oracle for jhipster应用程序时无法初始化数据库

使用Oracle for jhipster应用程序时无法初始化数据库
EN

Stack Overflow用户
提问于 2015-08-19 20:28:02
回答 3查看 1.4K关注 0票数 1

我正在尝试使用Oracle数据库在生产模式下进行jhipster开发。

代码语言:javascript
复制
profiles:
    active: prod
datasource:
    driverClassName: oracle.jdbc.OracleDriver
    dataSourceClassName: oracle.jdbc.pool.OracleDataSource
    url: jdbc:oracle:thin:@127.0.01:49161:xe
    databaseName:
    serverName: 
    username: vpp_owner
    password: vpp_owner

jpa:
    database-platform: org.hibernate.dialect.Oracle10GDialect
    database: ORACLE
    openInView: false
    show_sql: true
    generate-ddl: false
    hibernate:
        ddl-auto: none
        naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
    properties:
        hibernate.cache.use_second_level_cache: true
        hibernate.cache.use_query_cache: false
        hibernate.generate_statistics: false
        hibernate.cache.region.factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory

Oracle服务器已启动并运行,我能够使用给定的凭据连接到数据库。在运行mvn -Pprod mvn-boot之后,我得到了以下SQLException

代码语言:javascript
复制
Caused by: liquibase.exception.DatabaseException: ORA-00984: column not allowed here
 [Failed SQL: CREATE TABLE VPP_OWNER.JHI_USER (id NUMBER(38, 0) DEFAULT SEQ_USER.NEXTVAL NOT NULL, login VARCHAR2(50) NOT NULL, "PASSWORD" VARCHAR2(60), first_n
ame VARCHAR2(50), last_name VARCHAR2(50), email VARCHAR2(100), activated NUMBER(1) NOT NULL, lang_key VARCHAR2(5), activation_key VARCHAR2(20), reset_key VARCHA
R2(20), created_by VARCHAR2(50) NOT NULL, created_date TIMESTAMP DEFAULT sysdate NOT NULL, reset_date TIMESTAMP, last_modified_by VARCHAR2(50), last_modified_da
te TIMESTAMP, CONSTRAINT PK_JHI_USER PRIMARY KEY (id), UNIQUE (email), UNIQUE (login))]
        at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:316)
        at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55)
        at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:122)
        at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1247)
        at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1230)
        at liquibase.changelog.ChangeSet.execute(ChangeSet.java:548)
        ... 115 more
Caused by: java.sql.SQLSyntaxErrorException: ORA-00984: column not allowed here

        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
        at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
        at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587)
        at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:210)
        at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:30)
        at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:931)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1150)
        at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1792)
        at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1745)
        at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:334)
        at com.zaxxer.hikari.proxy.StatementProxy.execute(StatementProxy.java:83)
        at com.zaxxer.hikari.proxy.StatementJavassistProxy.execute(StatementJavassistProxy.java)
        at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:314)
        ... 120 more

问题似乎出在默认的SEQ_USER.NEXTVAL NOT NULL表达式上。

我使用的是jhipster 2.19.0和Oracle 11g。

EN

回答 3

Stack Overflow用户

发布于 2015-08-19 20:47:57

对于Oracle 11g,这是不可能的。

来自这里的文档:http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_7002.htm#sthref7262

DEFAULT表达式不能包含对PL/SQL函数或其他列、伪列CURRVAL、NEXTVAL、LEVEL、PRIOR和ROWNUM或未完全指定的date常量的引用。

此类语句仅适用于Oracle 12c或更高版本:

https://oracle-base.com/articles/12c/default-values-for-table-columns-enhancements-12cr1

票数 0
EN

Stack Overflow用户

发布于 2015-08-19 22:43:00

当我对生成的源代码应用一些更改时,我能够使用11G数据库。

  1. In User.java将id字段的GenerationType.SEQUENCE替换为GenerationType.AUTO。der liquibase文件中的
  2. 删除所有id字段的defaultValueComputed属性。
  3. 删除表的特定序列
  4. 不从“hibernate_sequence”changelog中删除代码;-)

G29

这是否可以包含在jhipster生成器中?

票数 0
EN

Stack Overflow用户

发布于 2015-08-21 03:47:07

正如@Moh-Aw所说,它可以与Oracle 12c或更高版本一起使用。对于不支持计算默认值的早期版本,您可以使用触发器。这里有一个补丁

代码语言:javascript
复制
diff --git a/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml b/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml
index dbdae03..702d0ba 100644
--- a/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml
+++ b/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml
@@ -22,7 +22,7 @@
     <changeSet id="00000000000001" author="jhipster">
         <createSequence sequenceName="SEQ_USER" startValue="1000" incrementBy="1"/>
         <createTable tableName="JHI_USER">
-            <column name="id" type="bigint" autoIncrement="${autoIncrement}" defaultValueComputed="SEQ_USER.NEXTVAL">
+            <column name="id" type="bigint" autoIncrement="${autoIncrement}">
                 <constraints primaryKey="true" nullable="false"/>
             </column>
             <column name="login" type="varchar(50)">
@@ -52,7 +52,7 @@
             <column name="last_modified_by" type="varchar(50)"/>
             <column name="last_modified_date" type="timestamp"/>
         </createTable>
-        
+
         <createTable tableName="JHI_AUTHORITY">
             <column name="name" type="varchar(50)">
                 <constraints primaryKey="true" nullable="false"/>
@@ -119,10 +119,10 @@
                   file="config/liquibase/users_authorities.csv"
                   separator=";"
                   tableName="JHI_USER_AUTHORITY"/>
-                  
+
         <createSequence sequenceName="SEQ_PERSISTENT_AUDIT_EVENT" startValue="1000" incrementBy="1"/>
         <createTable tableName="JHI_PERSISTENT_AUDIT_EVENT">
-            <column name="event_id" type="bigint" autoIncrement="${autoIncrement}" defaultValueComputed="SEQ_PERSISTENT_AUDIT_EVENT.NEXTVAL">
+            <column name="event_id" type="bigint" autoIncrement="${autoIncrement}" >
                 <constraints primaryKey="true" nullable="false"/>
             </column>
             <column name="principal" type="varchar(255)">
@@ -162,5 +162,37 @@
                                  referencedColumnNames="event_id"
                                  referencedTableName="JHI_PERSISTENT_AUDIT_EVENT"/>
     </changeSet>
-    
+
+    <changeSet id="defaultValueComputedOnAutoIncrementFields" author="cirovladimir" dbms="mysql,h2,postgresql">
+        <addDefaultValue tableName="JHI_USER"
+                         columnName="id" columnDataType="bigint" defaultValueComputed="SEQ_USER.NEXTVAL"/>
+        <addDefaultValue tableName="JHI_PERSISTENT_AUDIT_EVENT"
+                         columnName="event_id" columnDataType="bigint" defaultValueComputed="SEQ_PERSISTENT_AUDIT_EVENT.NEXTVAL"/>
+    </changeSet>
+
+    <changeSet id="triggerOnAutoIncrementFields" author="cirovladimir" dbms="oracle">
+        <createProcedure>
+            CREATE OR REPLACE TRIGGER TRG_JHI_USER_ID
+            BEFORE INSERT
+            ON JHI_USER
+            FOR EACH ROW
+            DECLARE
+            BEGIN
+            SELECT SEQ_USER.NEXTVAL INTO :NEW.ID FROM DUAL;
+            END TRG_JHI_USER_ID;
+        </createProcedure>
+        <createProcedure>
+            CREATE OR REPLACE TRIGGER TRG_PERSISTENT_AUDIT_EVENT_ID
+            BEFORE INSERT
+            ON JHI_PERSISTENT_AUDIT_EVENT
+            FOR EACH ROW
+            DECLARE
+            BEGIN
+            SELECT SEQ_PERSISTENT_AUDIT_EVENT.NEXTVAL INTO :NEW.EVENT_ID FROM DUAL;
+            END TRG_PERSISTENT_AUDIT_EVENT_ID;
+        </createProcedure>
+    </changeSet>
+
+
+
 </databaseChangeLog>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32095530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档