Ошибка HSQLDB «точность или масштаб вне диапазона» и «пользователю не хватает прав или объект не найден» при импорте файлов hibernate hbm2ddl - PullRequest
0 голосов
/ 17 марта 2020

Я не могу понять, что я делаю неправильно.

Схема. sql просто показывает, как HSQLDB см. Таблицу.

Понятия не имею. Может, я просто слепой или ...

Ошибка, указывающая на точность или масштаб вне диапазона ':

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:440)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:315)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166)
Truncated. see log file for complete stacktrace
Caused By: java.sql.SQLSyntaxErrorException: precision or scale out of range
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source)
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
Truncated. see log file for complete stacktrace
Caused By: org.hsqldb.HsqlException: precision or scale out of range
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.ParserDQL.readTypeDefinition(Unknown Source)
at org.hsqldb.ParserTable.readColumnDefinitionOrNull(Unknown Source)
at org.hsqldb.ParserTable.readTableContentsSource(Unknown Source)
Truncated. see log file for complete stacktrace

Это сущность:

@Entity
@Entity
@Table(name = "MY_TABLE", schema = "MY_SCHEMA", catalog = "")
public class MyTable {
@Id
@Column(name = "ID", nullable = false, precision = 0)
private long id;
@Basic
@Column(name = "STR1", nullable = true, length = 2265)
private String str1;
@Basic
@Column(name = "STR2", nullable = true, length = 1000)
private String str2;
@Basic
@Column(name = "NUM1", nullable = false, precision = 0)
private long num1;
@Basic
@Column(name = "STR3", nullable = true, length = 100)
private String str3;
@Basic
@Column(name = "NUM2", nullable = true, precision = 0)
private Long num2;
@Basic
@Column(name = "STR4", nullable = true, length = 36)
private String str4;
@Basic
@Column(name = "STR5", nullable = true, length = 250)
private String str5;
@Basic
@Column(name = "DT1", nullable = false)
private Time dt1;
@Basic
@Column(name = "DT2", nullable = true)
private Time dt2;
@Basic
@Column(name = "NUM3", nullable = true, precision = 0)
private Long num3;
@Basic
@Column(name = "STR6", nullable = true, length = 100)
private String str6;
@Basic
@Column(name = "STR7", nullable = true, length = 36)
private String str7;
@Basic
@Column(name = "STR8", nullable = true, length = 254)
private String str8;
}

Моя схема. sql выглядит следующим образом:

create table MY_SCHEMA.MY_TABLE (
ID bigint not null, STR7 varchar(36), STR6 varchar(100), NUM3 bigint not null, STR8 varchar(254), STR4 varchar(36),
STR5 varchar(250) not null, NUM2 bigint, STR1 varchar(2265), STR2 varchar(1000), DT2 time, DT1 time,
STR3 varchar(100), NUM1 bigint, primary key (ID))

Мои данные. sql выглядит следующим образом:

Insert into MY_SCHEMA.MY_TABLE(ID,STR7,STR6,NUM3,STR8,STR4,STR5,NUM2,STR1,STR2,DT2,DT1,STR3,NUM1)
values (1234567,'str7','str6',1,'str8','str4','str5',12345,'str1','str2',null,null,'str3',12345);

И мой код:

jpaProperties.put(org.hibernate.cfg.Environment.HBM2DDL_AUTO, "create");
jpaProperties.put(org.hibernate.cfg.Environment.HBM2DDL_IMPORT_FILES, "data.sql.old");
jpaProperties.put("javax.persistence.database-product-name", "HSQL");
jpaProperties.put("jadira.usertype.autoRegisterUserTypes", "true");
jpaProperties.put("jadira.usertype.databaseZone", "jvm");
jpaProperties.put("jadira.usertype.javaZone", "jvm");

Мой pom. xml это spring-boot.version> 2.0.4.RELEASE:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>6.1.2.Final</version>
</dependency>
<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId> <- 1.4.197
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>org.hsqldb</groupId>
  <artifactId>hsqldb</artifactId> <- 2.4.1
  <scope>runtime</scope>
</dependency>

ОБНОВЛЕНИЕ

Я изменяю код и добавляю oracle диалект свойство в jpa:

jpaProperties.put(org.hibernate.cfg.Environment.DIALECT,"org.hibernate.dialect.Oracle10gDialect");
....
jpaProperties.put("javax.persistence.database-product-name", "HSQL");

Это генерирует немного другая схема, oracle похоже, но теперь у меня есть новая проблема. Теперь все идет хорошо. Это вставка из скрипта. По крайней мере, у меня нет ошибки, поэтому я думаю, что она была вставлена. Но когда я пытаюсь это увидеть, для использования jpa и, например, findAll () возвращается новая ошибка:

WARN: SQL Error: -5501, SQLState: 42501
Mar 18, 2020 11:42:51 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: user lacks privilege or object not found: VW_ECONF_ATTACHEMENT in statement [select myTable0_.ID as ID1_0_, myTable0_.STR1 as STR12_0_, ..., myTable_.STR8 as STR814_0_ from MY_SCHEMA.MY_TABLE myTable_]

Должен ли я добавить имя пользователя и пароль?

1 Ответ

0 голосов
/ 17 марта 2020

Точность не может быть 0 долго, мне не нужно все это определять

...