Sir Rawlins!

<high five>

:)

Your problem is an interesting one. The error is like you say is caused by
Rank being an auto incrementer field. When saving the object, Transfer is
using a NULL value in the INSERT statement and this of course is illegal in
SQL server due to the field type.

My suggestion is not ideal but would be to change the field to a normal
numeric type and then handle the auto-increment functionality in an
overridden setRank() function within the decorator.

I would probably inject my ArticleService (if your using one) into the
decorator and have a function in there called getNextRank() which would call
a method in the gateway to get the highest rank so far from the D/B using
normal SQL. You could then increment this and store it in the article bean.

Just thinking about this, and you may be better to have this code in the
save() method (if you are using one) in the bean.

Long winded but I don't know if Transfer has a way around this - but knowing
me there probably is one which Bob (or Mark) will probably point out
shortly.. ;)

Cheers,
James.

---
James Allen
E: [email protected]


-----Original Message-----
From: [email protected] [mailto:[email protected]]
On Behalf Of Sir Rawlins
Sent: 03 March 2009 12:49
To: transfer-dev
Subject: [transfer-dev] Autoincredmening a non-primary key field.


Morning guys,

It's been a while :-) got myself a new challenge today. I've got a
table which stores data on articles, I've got an auto-incrementing
field on the table which denotes the articles 'rank' which I use for
ordering them and allowing users to increase or decrease an articles
rank but we keep it auto incrementing to avoid duplicates, however,
this is NOT the primary key of the table.

The Transfer XML for this table looks as such:

                        <object name="Article" table="Article"
decorator="Model.Article.Article">
                                <id name="Article_ID" type="numeric" />
                                <property name="Title" type="string"
column="Title" />
                                <property name="ShortDescription"
type="string"
column="ShortDescription" />
                                <property name="Heading" type="string"
column="Heading" />
                                <property name="SubHeading" type="string"
column="SubHeading" />
                                <property name="ArticleContent"
type="string"
column="ArticleContent" />
                                <property name="DateCreated" type="date"
column="DateCreated" />
                                <property name="DateModified" type="date"
column="DateModified" />
                                <property name="Rank" type="numeric"
column="Rank" />
                                <manytomany name="ArticleKeyword"
table="ArticleKeywordArticle">
                                        <link to="Article.Article"
column="Article_ID" />
                                        <link to="Article.ArticleKeyword"
column="ArticleKeyword_ID" />
                                        <collection type="array">
                                                <order property="Keyword"
order="asc" />
                                        </collection>
                                </manytomany>
                        </object>

Note the 'rank' field. Now, when trying to have Transfer save a new
instance of an article I get the following spewed back at me.

essage  Error Executing Database Query.
Detail  [Macromedia][SQLServer JDBC Driver][SQLServer]Cannot insert
explicit value for identity column in table 'Article' when
IDENTITY_INSERT is set to OFF

Can you guys offer any suggestions as to what is causing this and how
it might be solved? Presumably this is caused by Transfer trying to
inset a value into the auto-incrementing field? is that correct?

Cheers,

Rob


--~--~---------~--~----~------------~-------~--~----~
Before posting questions to the group please read:
http://groups.google.com/group/transfer-dev/web/how-to-ask-support-questions-on-transfer

You received this message because you are subscribed to the Google Groups 
"transfer-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/transfer-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to