Junit HSQLDB - пользователю не хватает привилегии или объект не найден - THIS_.oh-ordnbr
Я получаю исключение, когда имя моего столбца содержит дефис "-"
Entity : this is the entity name.
@Entity
@Table(name = "RequestHeader")
public class RequestHeader implements Serializable {
....
....
@Column(name = "`oh-ordnbr`")
private Integer ohOrdnbr;
Определение схемы: это запрос для создания схемы.
CREATE MEMORY TABLE PUB.REQUESTHEADER(
REQUESTID INTEGER,
IMUSERID INTEGER,
REQUESTDATE DATE,
REQUESTTIME INTEGER,
REQUESTSTATUS VARCHAR(19),
REQUESTTYPE VARCHAR(22),
HEADERINSTRUCTIONS VARCHAR(5150),
DATEFORMAT VARCHAR(20),
TIMEFORMAT VARCHAR(20),
LANGUAGEID INTEGER,
"OH-ORDNBR" INTEGER,
"OH-TRCNSTAMP" INTEGER,
ISPICKUPLIST BIT(1),
CONSTRAINT "RQH-1" PRIMARY KEY(REQUESTID)
);
Ошибка ниже:
Exception Stack: Error message which I have received by running the Junit.
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: THIS_.oh-ordnbr
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.ExpressionColumn.checkColumnsResolved(Unknown Source)
at org.hsqldb.QueryExpression.resolve(Unknown Source)
at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
at org.hsqldb.Session.compileStatement(Unknown Source)
at org.hsqldb.StatementManager.compile(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
Может ли кто-нибудь помочь мне исправить это?
3 ответа
Причиной ошибки объекта not found является тот факт, что столбец oh-ordnbr определен с учетом регистра (это происходит из-за двойных кавычек, которые вы помещаете вокруг него).
У вас есть два возможных решения:
- Не используйте тире (дефисы) в вашем SQL. В любом случае, это плохая практика, вместо этого используйте подчеркивание.
Обновите аннотацию JPA следующим образом:
@Column(name = "`OH-ORDNBR`") private Integer ohOrdnbr;
Я настоятельно рекомендую использовать подчеркивания вместо черточек, вы никогда не знаете, какие странности могут иметь различные реализации JPA при использовании второго решения.
Убедитесь, что в вашем конфигурационном файле указан правильный поставщик, я исправил ту же проблему, предоставив поставщика org.hibernate.ejb.HibernatePersistence.
Если сценарии HSQL выполняются через Java и если после любого нового запроса к таблице следуют запросы select/alter/update, он всегда выдает "пользователю не хватает объекта привилегий". В действительности, запросы на создание после выполнения с помощью Java-инструкций никогда не передаются в БД, и они не сохраняются, и мы запускаем наш выбор / изменение / обновление, и это приводит к исключению. Если мы запускаем запросы построчно и фиксируем для каждой строки, мы могли бы избежать этой ошибки.