On Tuesday, January 21, 2003 at 10:06:54 (+0100) Armin Waibel writes: >Hi Bill, > >I add your new test cases to CVS. I made some minor >modifications. >Curious, all tests work like designed - test attached, check it out >please. > >> If you comment out the two testMtoNSeparate_XX methods and run the >> junit test with testMtoNTogether, the resulting FISH table is: > >you add two new fishs --> 2 > >> If you comment out testMtoNTogether, and run the junit test with the >> two testMtoNSeparate_XX methods, the resulting FISH table is: > >you add two new fishs per test case --> 4 > >Did I overlook something?
Thanks very much Armin for your help. Unfortunately, perhaps I have not made clear what the problem is. I want the name column of the FISH table to be treated as unique. If I create a Fish named 'tuna', add it to the favoriteFoods of a Gourmet named 'Bob', and store the Gourmet 'Bob' in a newly created database, I expect one row to be created in the FISH table with the name column set to 'tuna'. If I then, in another run of the program, or in another program altogether --- wherever --- create another Fish, also named 'tuna', add to the favoriteFoods of a Gourmet named 'Paula' and store the Gourmet 'Paula' to the same database where 'Bob' is stored, I expect there still to be only one row in the FISH table --- one for the fish 'tuna'. Your test case assigns a unique name to the fish by giving them a timestamp. So, when you store the fish, you get one row per each fish you create, your test case passes, but there are 8 rows created in the FISH table: % echo 'select * from FISH;' | mysql ojb foodId name calories typeOfWater 1 tuna 242 salt 3 trout 52 fresh water 5 trout_1043160480295 52 fresh water 6 tuna_1043160480295 242 salt 7 tuna_1043160480471 242 salt 8 trout_1043160480471 52 fresh water 9 trout_1043160480663 52 fresh water 10 tuna_1043160480663 242 salt If I change the test case you sent (again, thank you) by removing the addition of the timestamps to the Fish names, and use only the fish names 'trout' and 'tuna', the test case fails, and the FISH table is populated with the same number of rows, with duplicate names: % echo 'select * from FISH;' | mysql ojb foodId name calories typeOfWater 1 tuna 242 salt 3 trout 52 fresh water 5 trout 52 fresh water 6 tuna 242 salt 7 tuna 242 salt 8 trout 52 fresh water 9 trout 52 fresh water 10 tuna 242 salt What I expect to see is this: % echo 'select * from FISH;' | mysql ojb foodId name calories typeOfWater 1 tuna 242 salt 3 trout 52 fresh water I just could not figure out how to force OJB to treat the 'name' column as unique and only store the entry once (again, totally ignoring the fields calories and typeOfWater). Does this make sense? I hope I haven't confused the issue. Thomas mentioned that perhaps this is a problem in the ODMG layer and that I should use the PersistenceBroker API. I can certainly try this, though I was hoping to use ODMG to avoid the extra work associated with the PersistenceBroker (i.e., "locking, tracking objects state, object transactions") mentioned in the FAQ. One the other hand, if the ODMG layer is not broken in this regard, I would like to know how to fix my declarations and coding to produce the result I need (I'm going to have several of these types of tables and I simply can't afford to have duplicates). I have tried numerous combinations of coding changes, changes to the schema and to the repository definitions, none of which seem to work. Thanks again Armin for your help (and thanks, too, to Thomas --- any relation to the famous composer?). Bill -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
