I'd guess this is because "User" is a SQLServer keyword and it requires
special handling when used as identifier.
We have a bug report already -
http://objectstyle.org/cayenne/lists/cayenne-devel/2005/06/0003.html (I
guess I'll raise it in priority as this seems to come up pretty often).
One workaround would be to use a different name for this table. Another
way (I haven't tested it, but it should probably work) is to enter [User]
as a table name in CayenneModeler.
Hope this helps
Andrus
> Hi.
>
> I'm trying to use Cayenne orm-tool for some small test
> project using Microsoft SQL server database. And there
> are many exceptions during all work with DataObjects,
> for example:
>
> 1.)
> ...
> DataContext ctxt =
> BasicServletConfiguration.getDefaultContext(request.getSession());
> SelectQuery query = new SelectQuery(User.class);
> List users = ctxt.performQuery(query);
> ...
>
> throw
> "
> Caused by: java.sql.SQLException:
> [Microsoft][SQLServer 2000 Driver for
> JDBC][SQLServer]Incorrect syntax near the keyword
> 'User'.
> at
> com.microsoft.jdbc.base.BaseExceptions.createException(Unknown
> Source)
> at
> com.microsoft.jdbc.base.BaseExceptions.getException(Unknown
> Source)
> at
> com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown
> Source)
> at
> com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown
> Source)
> at
> com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown
> Source)
> at
> com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown
> Source)
> at
> com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown
> Source)
> at
> com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown
> Source)
> at
> com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown
> Source)
> at
> com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown
> Source)
> at
> com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown
> Source)
> at
> com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown
> Source)
> at
> com.microsoft.jdbc.base.BasePreparedStatement.executeQuery(Unknown
> Source)
> at
> org.objectstyle.cayenne.access.DataNode.runSelect(DataNode.java:386)
> at
> org.objectstyle.cayenne.access.DataNode.performQueries(DataNode.java:350)
> ... 23 more
> "
>
> 2.)
> ...
> DataContext ctxt =
> BasicServletConfiguration.getDefaultContext(request.getSession());
> User anUser = (User)
> ctxt.createAndRegisterNewObject("User");
> anUser.setName("SomeName");
> ctxt.commitChanges(Level.WARN);
> ...
>
> throw next "Commit" exception:
>
> Caused by: java.sql.SQLException:
> [Microsoft][SQLServer 2000 Driver for
> JDBC][SQLServer]Syntax error converting the varchar
> value 'User' to a column of data type int.
> at
> com.microsoft.jdbc.base.BaseExceptions.createException(Unknown
> Source)
> at
> com.microsoft.jdbc.base.BaseExceptions.getException(Unknown
> Source)
> at
> com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown
> Source)
> at
> com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown
> Source)
> at
> com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown
> Source)
> at
> com.microsoft.jdbc.sqlserver.tds.TDSRequest.getRow(Unknown
> Source)
> at
> com.microsoft.jdbc.sqlserver.SQLServerImplResultSet.positionCursor(Unknown
> Source)
> at com.microsoft.jdbc.base.BaseResultSet.next(Unknown
> Source)
> at
> org.objectstyle.cayenne.dba.sybase.SybasePkGenerator.pkFromDatabase(SybasePkGenerator.java:184)
> at
> org.objectstyle.cayenne.dba.JdbcPkGenerator.generatePkForDbEntity(JdbcPkGenerator.java:325)
> at
> org.objectstyle.cayenne.access.util.PrimaryKeyHelper.createPermIdsForObjEntity(PrimaryKeyHelper.java:183)
> at
> org.objectstyle.cayenne.access.ContextCommit.createPrimaryKeys(ContextCommit.java:580)
> at
> org.objectstyle.cayenne.access.ContextCommit.commit(ContextCommit.java:142)
> at
> org.objectstyle.cayenne.access.DataContext.commitChanges(DataContext.java:1266)
> ... 17 more
>
> Can you help me? Where is problem?
> I'm using Microsoft drivers:
> msbase.jar
> mssqlserver.jar
> msutil.jar
>
>
>
>
>
> There some lines of code and xml files that was
> generated by GUU tool:
>
> 1 - User.java:
> "
> import java.util.List;
>
> public class User extends
> org.objectstyle.cayenne.CayenneDataObject {
>
> public static final String NAME_PROPERTY = "name";
> public static final String ADDRESS_ARRAY_PROPERTY
> = "addressArray";
>
> public static final String USER_ID_PK_COLUMN =
> "user_id";
>
> public void setName(String name) {
> writeProperty("name", name);
> }
>
> public String getName() {
> return (String) readProperty("name");
> }
>
>
> public void addToAddressArray(Address obj) {
> addToManyTarget("addressArray", obj, true);
> }
>
> public void removeFromAddressArray(Address obj) {
> removeToManyTarget("addressArray", obj, true);
> }
>
> public List getAddressArray() {
> return (List) readProperty("addressArray");
> }
> }
> "
>
> 2 - cayenne.xml:
> "
> <?xml version="1.0" encoding="utf-8"?>
> <domains project-version="1.1">
> <domain name="Domain">
> <map name="Map" location="Map.map.xml"/>
> <node name="DomainNode"
> datasource="DomainNode.driver.xml"
>
> adapter="org.objectstyle.cayenne.dba.sqlserver.SQLServerAdapter"
>
> factory="org.objectstyle.cayenne.conf.DriverDataSourceFactory">
> <map-ref name="Map"/>
> </node>
> </domain>
> </domains>
> "
>
> 3 - DomainNode.xml:
> "
> <?xml version="1.0" encoding="utf-8"?>
> <driver project-version="1.1"
> class="com.microsoft.jdbc.sqlserver.SQLServerDriver">
> <url
> value="jdbc:microsoft:sqlserver://Paradise;databaseName=TESTCAYENNE;"/>
> <connectionPool min="1" max="20" />
> <login userName="sa" password="lvivteamsql"/>
> </driver>
> "
>
> 4 - Map.xml
> "
> <?xml version="1.0" encoding="utf-8"?>
> <data-map project-version="1.1">
> <property name="defaultPackage" value="com.cayenne"/>
> <property name="defaultSchema" value="dbo"/>
> <db-entity name="Address" schema="dbo"
> catalog="TESTCAYENEE">
> <db-attribute name="address" type="VARCHAR"
> isMandatory="true" length="50"/>
> <db-attribute name="address_id" type="INTEGER"
> isPrimaryKey="true" isMandatory="true" length="10"/>
> <db-attribute name="user_id" type="INTEGER"
> isMandatory="true" length="10"/>
> </db-entity>
> <db-entity name="User" schema="dbo"
> catalog="TESTCAYENEE">
> <db-attribute name="name" type="VARCHAR"
> isMandatory="true" length="50"/>
> <db-attribute name="user_id" type="INTEGER"
> isPrimaryKey="true" isMandatory="true" length="10"/>
> </db-entity>
> <obj-entity name="Address"
> className="com.cayenne.Address"
> dbEntityName="Address">
> <obj-attribute name="address"
> type="java.lang.String" db-attribute-path="address"/>
> </obj-entity>
> <obj-entity name="User" className="com.cayenne.User"
> dbEntityName="User">
> <obj-attribute name="name" type="java.lang.String"
> db-attribute-path="name"/>
> </obj-entity>
> <db-relationship name="toUser" source="Address"
> target="User" toMany="false">
> <db-attribute-pair source="user_id"
> target="user_id"/>
> </db-relationship>
> <db-relationship name="addressArray" source="User"
> target="Address" toMany="true">
> <db-attribute-pair source="user_id"
> target="user_id"/>
> </db-relationship>
> <obj-relationship name="toUser" source="Address"
> target="User" db-relationship-path="toUser"/>
> <obj-relationship name="addressArray" source="User"
> target="Address" db-relationship-path="addressArray"/>
> </data-map>
> "
>
>
>
> __________________________________
> Discover Yahoo!
> Stay in touch with email, IM, photo sharing and more. Check it out!
> http://discover.yahoo.com/stayintouch.html
This archive was generated by hypermail 2.0.0 : Tue Jun 07 2005 - 12:19:37 EDT