This could be a regression bug in the ODMG layer. Please try to use PersistenceBroker API. It should handle m:n properly.
I can't promise a quick solution to this problem.
cheers,
Thomas
Bill Lear wrote:
I have had no success, still, in getting the behavior I need for unique columns in OJB. I have narrowed down the problem of unique columns to the code attached below my sig. --- a modification of the ManyToManyTest.If you comment out the two testMtoNSeparate_XX methods and run the junit test with testMtoNTogether, the resulting FISH table is: % echo 'select * from FISH;' | mysql ojb foodId name calories typeOfWater 1 trout 52 fresh water 2 tuna 242 salt If you comment out testMtoNTogether, and run the junit test with the two testMtoNSeparate_XX methods, the resulting FISH table is: % echo 'select * from FISH;' | mysql ojb foodId name calories typeOfWater 1 trout 52 fresh water 2 tuna 242 salt 3 tuna 242 salt 4 trout 52 fresh water So, my question is: "How do I get the two testMtoNSeparate_XX methods run together to have the same result on the FISH table as the testMtoNTogether method run alone?" I do not want to have duplicate entries in the FISH table. I have tried modifying the schema and repository_junit.xml to mark the FISH 'name' column as unique, as a primary key, non-nullable, etc., etc., to no avail. Since I have already spent a few days looking at the code and poring over the documentation and e-mail archives, if I can't find an answer to this within a day, I will have to report back to our organization that we will not be able to use OJB, which is a shame, as it looks to have great promise. Could someone please, please tell me if this is possible? If not, is there a planned "fix" for it, if it is indeed a shortcoming? I could work around this for the meantime, but I will need this functionality fairly soon. Thank you very much. Bill ======= Modified ManyToManyTest case ====== package org.apache.ojb.odmg; import java.util.List; import junit.framework.TestCase; import org.apache.ojb.broker.Fish; import org.apache.ojb.broker.PersistenceBrokerFactory; import org.apache.ojb.broker.singlevm.PersistenceBrokerConfiguration; import org.apache.ojb.broker.util.configuration.ConfigurationException; import org.odmg.Database; import org.odmg.Implementation; import org.odmg.Transaction; public class ManyToManyTest extends TestCase { private String databaseName; public ManyToManyTest(String name) { super(name); } public void setUp() { try { databaseName = ((PersistenceBrokerConfiguration) PersistenceBrokerFactory .getConfigurator() .getConfigurationFor(null)) .getRepositoryFilename(); } catch (ConfigurationException e) { databaseName = "repository.xml"; } } public void tearDown() { databaseName = null; } private void store(Implementation odmg, Database db, ODMGGourmet gourmet) { try { Transaction tx = odmg.newTransaction(); tx.begin(); db.makePersistent(gourmet); tx.commit(); } catch (Throwable e) { fail("ERROR: " + e.getMessage()); } } private Database getDB(Implementation odmg) { Database db = odmg.newDatabase(); try { db.open(databaseName, Database.OPEN_READ_WRITE); } catch (Throwable t) { return null; } return db; } public void testMtoNSeparate_I() { ODMGGourmet paula = new ODMGGourmet("paula"); ODMGGourmet candy = new ODMGGourmet("candy"); Fish tuna = new Fish("tuna", 242, "salt"); Fish trout = new Fish("trout", 52, "fresh water"); paula.addFavoriteFood(trout); candy.addFavoriteFood(tuna); Implementation odmg = OJB.getInstance(); Database db = getDB(odmg); store(odmg, db, paula); store(odmg, db, candy); } public void testMtoNSeparate_II() { ODMGGourmet james = new ODMGGourmet("james"); ODMGGourmet doris = new ODMGGourmet("doris"); Fish tuna = new Fish("tuna", 242, "salt"); Fish trout = new Fish("trout", 52, "fresh water"); james.addFavoriteFood(tuna); doris.addFavoriteFood(tuna); doris.addFavoriteFood(trout); Implementation odmg = OJB.getInstance(); Database db = getDB(odmg); store(odmg, db, james); store(odmg, db, doris); } public void testMtoNTogether() { Fish tuna = new Fish("tuna", 242, "salt"); Fish trout = new Fish("trout", 52, "fresh water"); ODMGGourmet paula = new ODMGGourmet("paula"); ODMGGourmet candy = new ODMGGourmet("candy"); paula.addFavoriteFood(trout); candy.addFavoriteFood(tuna); Implementation odmg = OJB.getInstance(); Database db = getDB(odmg); store(odmg, db, paula); store(odmg, db, candy); ODMGGourmet james = new ODMGGourmet("james"); ODMGGourmet doris = new ODMGGourmet("doris"); james.addFavoriteFood(tuna); doris.addFavoriteFood(tuna); doris.addFavoriteFood(trout); store(odmg, db, james); store(odmg, db, doris); } } -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
