The set/get methods are required for collections, so you are doing
that part right. As far as that addable warning goes, I would say
ignore it. I think that its spitting out even when it shouldn't and
I've been meaning to file a bug report about it. If its working as
expected to worry, if not give a holler.
<!--- end meaningful message here --> :)
The addable attribute is (or at least should be) taken care of if you
have two methods of type:
removeHighScore(HighScroe score)
and
addHighScore(HighScore score)
However, I have those methods in my classes but I still get the
warning. Go figure :-/ anyone else here perhaps know why or want to
set me straight on what I'm doing wrong with this. I know we have
discussed it before, but hey, its worth rehashing me thinks.
-Nick
On Mon, 18 Oct 2004 12:16:05 +0800, Sean Liang
<[EMAIL PROTECTED]> wrote:
>
> Anyone who has the experience in using collection, please kindly take a look
> at my code and show me a way.
>
> ------------- part of mapping file -----------
> <class identity="id" key-generator="HIGH-LOW" name="model.Tournament">
> <map-to table="tournament" />
> <field name="id" type="integer">
> <sql name="id" type="integer" />
> </field>
> <field name="highScore" type="model.HighScore"
> collection="collection">
> <sql many-key="tournament" />
> </field>
> </class>
> <class identity="id" key-generator="HIGH-LOW" name="model.HighScore">
> <map-to table="highscore" />
> <field name="id" type="integer">
> <sql name="id" type="integer" />
> </field>
> <field name="score" type="double">
> <sql name="score" type="double" />
> </field>
> <field name="tournament" type="model.Tournament">
> <sql name="tournament" />
> </field>
> </class>
>
>
> ------------- part of Tournament.java -----------
> private Collection highScoreList = new ArrayList();
> public void addHighScore(HighScore highScore) {
> highScoreList.add(highScore);
> highScore.setTournament(this);
> }
> public Collection getHighScore() {
> return highScoreList;
> }
>
> It then gives me an exception:
> org.exolab.castor.jdo.DataObjectAccessException: no method to set value for
> field: model.HighScore in class: ClassMolder model.Tournament
> at org.exolab.castor.persist.FieldMolder.setValue(FieldMolder.java:347)
> at
> org.exolab.castor.persist.ClassMolder.revertObject(ClassMolder.java:2562)
> at org.exolab.castor.persist.LockEngine.revertObject(LockEngine.java:848)
> at
> org.exolab.castor.persist.TransactionContext.rollback(TransactionContext.java:1760)
> at
> org.exolab.castor.jdo.engine.DatabaseImpl.rollback(DatabaseImpl.java:569)
> ......
>
> It seems that the setter is required for the collection type? But I didn't
> find it in the Product.java of JDO example.
>
> After adding the setter method:
>
> ------------- part of Tournament.java ----------- public void
> setHighScore(Collection list) {
> highScoreList = list;
> }
>
> It tells me a warning this time:
> org.exolab.castor.persist.CollectionProxy$ColProxy add
> Warning: FieldMolder FieldMolder of
> model.Tournament.sethighScore(model.HighScore highScore) is not addable;
> collection needs to set for object type model.HighScore.
>
> I was confused, could anybody provide me a good practice of collection
> mapping in JDO?
>
>
> Thanks,
> Sean
>
> -----------------------------------------------------------
> If you wish to unsubscribe from this mailing, send mail to
> [EMAIL PROTECTED] with a subject of:
> unsubscribe castor-user
>
>
>
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-user