i getting exception when column name contains hyphen "-"
entity : entity name. @entity @table(name = "requestheader") public class requestheader implements serializable { .... .... @column(name = "`oh-ordnbr`") private integer ohordnbr;
schema definition: query schema creation.
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) );
the error below:
exception stack: error message have received running junit. caused by: org.hsqldb.hsqlexception: user lacks privilege or object not found: this_.oh-ordnbr @ org.hsqldb.error.error.error(unknown source) @ org.hsqldb.error.error.error(unknown source) @ org.hsqldb.expressioncolumn.checkcolumnsresolved(unknown source) @ org.hsqldb.queryexpression.resolve(unknown source) @ org.hsqldb.parserdql.compilecursorspecification(unknown source) @ org.hsqldb.parsercommand.compilepart(unknown source) @ org.hsqldb.parsercommand.compilestatement(unknown source) @ org.hsqldb.session.compilestatement(unknown source) @ org.hsqldb.statementmanager.compile(unknown source) @ org.hsqldb.session.execute(unknown source)
could 1 me in fixing this?
the reason object not found error fact oh-ordnbr column defined case sensitive (this due double quotes put around it).
you have 2 possible solutions:
- do not use dashes (hyphens) in sql. bad practice anyway, use underscores instead.
update jpa annotation follows:
@column(name = "`oh-ordnbr`") private integer ohordnbr;
i recommend using underscores instead of dashes, never know weirdness different jpa implementations might have when using second solution.