Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] JPA entities cannot be named as SQL Keywords?

It would probably be a good idea not to use a reserve word as a table name. 
I would recommend using the @Table to provide a different table name.

You can set your @Table name to "\"USER\"" if you wish to escape it.  JPA
2.0 will provide support for using escaped names, this functionality is
already present in EclipseLink 2.0 builds.



jml83 wrote:
> 
> Hello, I have a class called User which I attempted to create a DDL for in
> SQLServer using the Eclipse Dali plugin. However it gives me an error when
> I attempt to generate the table. I also had a similar problem with an
> attribute in anothe class called "key". 
> 
> I believe this is because the words "User" and "Key" are keywords and
> causing the sql to barf. Executing the same SQL query directly, but
> escaping the words [key] and [user] seems to work perfectly.
> 
> Is there a way to make Eclipselink escape column and table names? Is there
> a reason why all generated SQL object names can't automatically escaped?
> 
> 
> Local Exception Stack: 
> Exception [EclipseLink-4002] (Eclipse Persistence Services -
> 1.1.2.v20090612-r4475):
> org.eclipse.persistence.exceptions.DatabaseException
> Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException:
> Incorrect syntax near the keyword 'USER'.
> Error Code: 156
> Call: DROP TABLE USER
> Query: DataModifyQuery(sql="DROP TABLE USER")
> 	at
> org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:323)
> 	at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:767)
> 	at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:833)
> 	at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:558)
> 	at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:501)
> 	at
> org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:536)
> 	at
> org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:205)
> 	at
> org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:191)
> 	at
> org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelectCall(DatasourceCallQueryMechanism.java:234)
> 	at
> org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelect(DatasourceCallQueryMechanism.java:214)
> 	at
> org.eclipse.persistence.queries.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:85)
> 	at
> org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:664)
> 	at
> org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:2243)
> 	at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1181)
> 	at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1165)
> 	at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1125)
> 	at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeNonSelectingCall(AbstractSession.java:894)
> 	at
> org.eclipse.persistence.tools.schemaframework.DatabaseObjectDefinition.dropFromDatabase(DatabaseObjectDefinition.java:89)
> 	at
> org.eclipse.persistence.tools.schemaframework.SchemaManager.dropObject(SchemaManager.java:446)
> 	at
> org.eclipse.persistence.tools.schemaframework.SchemaManager.replaceObject(SchemaManager.java:873)
> 	at
> org.eclipse.persistence.tools.schemaframework.TableCreator.replaceTablesAndConstraints(TableCreator.java:297)
> 	at
> org.eclipse.persistence.tools.schemaframework.TableCreator.replaceTables(TableCreator.java:260)
> 	at
> org.eclipse.persistence.tools.schemaframework.SchemaManager.replaceDefaultTables(SchemaManager.java:944)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.createOrReplaceDefaultTables(EntityManagerFactoryProvider.java:78)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.writeDDLToDatabase(EntityManagerFactoryProvider.java:286)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.generateDDL(EntityManagerFactoryProvider.java:115)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:260)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:111)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:163)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:150)
> 	at org.eclipse.jpt.eclipselink.core.ddlgen.Main.perform(Main.java:87)
> 	at org.eclipse.jpt.eclipselink.core.ddlgen.Main.execute(Main.java:78)
> 	at org.eclipse.jpt.eclipselink.core.ddlgen.Main.main(Main.java:65)
> Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect
> syntax near the keyword 'USER'.
> 	at
> com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown
> Source)
> 	at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown
> Source)
> 	at
> com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(Unknown
> Source)
> 	at
> com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(Unknown
> Source)
> 	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
> 	at
> com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown
> Source)
> 	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown
> Source)
> 	at
> com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown
> Source)
> 	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeUpdate(Unknown
> Source)
> 	at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:756)
> 	... 31 more
> Jul 15, 2009 2:56:42 PM
> org.eclipse.persistence.session.file:/Z:/workspace/Domain/bin/-Domain
> WARNING: 
> Local Exception Stack: 
> Exception [EclipseLink-4002] (Eclipse Persistence Services -
> 1.1.2.v20090612-r4475):
> org.eclipse.persistence.exceptions.DatabaseException
> Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException:
> Incorrect syntax near the keyword 'USER'.
> Error Code: 156
> Call: CREATE TABLE USER (NAME VARCHAR(255) NOT NULL, EMAIL VARCHAR(255)
> NULL, PRIMARY KEY (NAME))
> Query: DataModifyQuery(sql="CREATE TABLE USER (NAME VARCHAR(255) NOT NULL,
> EMAIL VARCHAR(255) NULL, PRIMARY KEY (NAME))")
> 	at
> org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:323)
> 	at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:767)
> 	at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:833)
> 	at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:558)
> 	at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:501)
> 	at
> org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:536)
> 	at
> org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:205)
> 	at
> org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:191)
> 	at
> org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelectCall(DatasourceCallQueryMechanism.java:234)
> 	at
> org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelect(DatasourceCallQueryMechanism.java:214)
> 	at
> org.eclipse.persistence.queries.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:85)
> 	at
> org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:664)
> 	at
> org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:2243)
> 	at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1181)
> 	at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1165)
> 	at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1125)
> 	at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeNonSelectingCall(AbstractSession.java:894)
> 	at
> org.eclipse.persistence.tools.schemaframework.DatabaseObjectDefinition.createOnDatabase(DatabaseObjectDefinition.java:81)
> 	at
> org.eclipse.persistence.tools.schemaframework.SchemaManager.createObject(SchemaManager.java:187)
> 	at
> org.eclipse.persistence.tools.schemaframework.SchemaManager.replaceObject(SchemaManager.java:882)
> 	at
> org.eclipse.persistence.tools.schemaframework.TableCreator.replaceTablesAndConstraints(TableCreator.java:297)
> 	at
> org.eclipse.persistence.tools.schemaframework.TableCreator.replaceTables(TableCreator.java:260)
> 	at
> org.eclipse.persistence.tools.schemaframework.SchemaManager.replaceDefaultTables(SchemaManager.java:944)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.createOrReplaceDefaultTables(EntityManagerFactoryProvider.java:78)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.writeDDLToDatabase(EntityManagerFactoryProvider.java:286)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.generateDDL(EntityManagerFactoryProvider.java:115)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:260)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:111)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:163)
> 	at
> org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:150)
> 	at org.eclipse.jpt.eclipselink.core.ddlgen.Main.perform(Main.java:87)
> 	at org.eclipse.jpt.eclipselink.core.ddlgen.Main.execute(Main.java:78)
> 	at org.eclipse.jpt.eclipselink.core.ddlgen.Main.main(Main.java:65)
> Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect
> syntax near the keyword 'USER'.
> 	at
> com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown
> Source)
> 	at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown
> Source)
> 	at
> com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(Unknown
> Source)
> 	at
> com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(Unknown
> Source)
> 	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
> 	at
> com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown
> Source)
> 	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown
> Source)
> 	at
> com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown
> Source)
> 	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeUpdate(Unknown
> Source)
> 	at
> org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:756)
> 	... 31 more
> 
> 
> 


-----
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland 
http://www.eclipse.org/eclipselink/
 EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
TopLink 
Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink , 
http://wiki.oracle.com/page/TopLink TopLink 
Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink , 
http://www.nabble.com/EclipseLink-f26430.html EclipseLink 
Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence 
-- 
View this message in context: http://www.nabble.com/JPA-entities-cannot-be-named-as-SQL-Keywords--tp24504083p24518414.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.



Back to the top