Re: many to many relation

From: gilbertoca (gilbertoc..mail.com)
Date: Wed Sep 29 2010 - 18:07:56 UTC

  • Next message: Robert Zeigler: "Re: many to many relation"

    Some progress ... rs rs rs
    Clicking just one time on ObjRelationshipInspector[1] and confirming the new
    db relationship path my test works but not correctly. In DELETE RULES I've
    put CASCADE.
    So, just remembering:

    User <--> Role

    tables:
    SHIRO_USER --> SHIRO_USER_ROLE<---SHIRO_ROLE
    SHIRO_ROLE-->SHIRO_ROLE_PERMISSION

    The Cayenne config files:
    http://code.google.com/p/construtor/source/browse/#svn/trunk/click-orm-integration/orm/src/test/resources
    The test case:
    http://code.google.com/p/construtor/source/browse/trunk/click-orm-integration/orm/src/test/java/com/google/construtor/extras/security/shiro/cayenne/UserCayenneTest.java

    When doing userService.delete(user.getId());, cayenne removes everything(in
    this order):
    SHIRO_USER --> SHIRO_USER_ROLE<---SHIRO_ROLE-->SHIRO_ROLE_PERMISSION

    But should be this way:
    SHIRO_USER --> SHIRO_USER_ROLE

    > ===========testAddAndRemoveUser======
    > 2010-09-29 14:32:41,547 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 1 query.
    > 2010-09-29 14:32:41,547 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,548 INFO [org.apache.cayenne.access.QueryLogger] -
    > SELECT t0.ID, t0.DESCRIPTION, t0.NAME FROM SHIRO_ROLE t0 WHERE t0.NAME = ?
    > [bind: 1->NAME:'USER_ROLE']
    > 2010-09-29 14:32:41,550 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > returned 1 row. - took 1 ms.
    > 2010-09-29 14:32:41,550 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > ***** getting role {<ObjectId:Role, ID=-2>; committed; [id=>-2; users=>?;
    > description=>Default role for all Users; name=>USER_ROLE; permissions=>?]}
    > for a new user. *****
    > 2010-09-29 14:32:41,615 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 2 queries.
    > 2010-09-29 14:32:41,616 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,837 INFO [org.apache.cayenne.access.QueryLogger] -
    > SELECT NEXT_ID FROM AUTO_PK_SUPPORT WHERE TABLE_NAME = 'SHIRO_USER'
    > 2010-09-29 14:32:41,844 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > returned 1 row. - took 7 ms.
    > 2010-09-29 14:32:41,845 INFO [org.apache.cayenne.access.QueryLogger] -
    > UPDATE AUTO_PK_SUPPORT SET NEXT_ID = NEXT_ID + 20 WHERE TABLE_NAME =
    > 'SHIRO_USER'
    > 2010-09-29 14:32:41,847 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,848 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 2 queries.
    > 2010-09-29 14:32:41,849 INFO [org.apache.cayenne.access.QueryLogger] -
    > INSERT INTO SHIRO_USER (EMAIL, ID, PASSWORD, USERNAME, VERSION) VALUES (?,
    > ?, ?, ?, ?)
    > 2010-09-29 14:32:41,850 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->EMAIL:'testuse..ppfuse.org', 2->ID:1200,
    > 3->PASSWORD:'testpass', 4->USERNAME:'Test', 5->VERSION:NULL]
    > 2010-09-29 14:32:41,851 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,851 INFO [org.apache.cayenne.access.QueryLogger] -
    > INSERT INTO SHIRO_USER_ROLE (ROLE_ID, USER_ID) VALUES (?, ?)
    > 2010-09-29 14:32:41,851 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ROLE_ID:-2, 2->USER_ID:1200]
    > 2010-09-29 14:32:41,852 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,855 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > 2010-09-29 14:32:41,855 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 1 query.
    > 2010-09-29 14:32:41,855 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,856 INFO [org.apache.cayenne.access.QueryLogger] -
    > SELECT t0.ID, t0.USERNAME, t0.EMAIL, t0.PASSWORD, t0.VERSION FROM
    > SHIRO_USER t0
    > 2010-09-29 14:32:41,857 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > returned 4 rows. - took 1 ms.
    > 2010-09-29 14:32:41,857 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > ***** Does the object was update or shoul I get it by find method? *****
    > ***** should use cache? {<ObjectId:User, ID=1200>; committed; [id=>1200;
    > username=>Test; email=>testuse..ppfuse.org; roles=>(..);
    > password=>testpass; version=>null]}*****
    > 2010-09-29 14:32:41,861 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 1 query.
    > 2010-09-29 14:32:41,862 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,871 INFO [org.apache.cayenne.access.QueryLogger] -
    > SELECT t0.ROLE_ID, t0.PERMISSION FROM SHIRO_ROLE_PERMISSION t0 WHERE
    > t0.ROLE_ID = ? [bind: 1->ROLE_ID:-2] - prepared in 9 ms.
    > 2010-09-29 14:32:41,872 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > returned 1 row. - took 10 ms.
    > 2010-09-29 14:32:41,873 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > 2010-09-29 14:32:41,876 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 1 query.
    > 2010-09-29 14:32:41,876 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,883 INFO [org.apache.cayenne.access.QueryLogger] -
    > SELECT DISTINCT t0.ID, t0.USERNAME, t0.EMAIL, t0.PASSWORD, t0.VERSION FROM
    > SHIRO_USER t0 JOIN SHIRO_USER_ROLE t1 ON (t0.ID = t1.USER_ID) WHERE
    > t1.ROLE_ID = ? [bind: 1->ROLE_ID:-2] - prepared in 6 ms.
    > 2010-09-29 14:32:41,884 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > returned 4 rows. - took 7 ms.
    > 2010-09-29 14:32:41,890 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > 2010-09-29 14:32:41,891 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 1 query.
    > 2010-09-29 14:32:41,891 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,891 INFO [org.apache.cayenne.access.QueryLogger] -
    > SELECT DISTINCT t0.ID, t0.DESCRIPTION, t0.NAME FROM SHIRO_ROLE t0 JOIN
    > SHIRO_USER_ROLE t1 ON (t0.ID = t1.ROLE_ID) WHERE t1.USER_ID = ? [bind:
    > 1->USER_ID:-3]
    > 2010-09-29 14:32:41,892 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > returned 1 row. - took 1 ms.
    > 2010-09-29 14:32:41,892 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > 2010-09-29 14:32:41,893 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 1 query.
    > 2010-09-29 14:32:41,893 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,893 INFO [org.apache.cayenne.access.QueryLogger] -
    > SELECT DISTINCT t0.ID, t0.DESCRIPTION, t0.NAME FROM SHIRO_ROLE t0 JOIN
    > SHIRO_USER_ROLE t1 ON (t0.ID = t1.ROLE_ID) WHERE t1.USER_ID = ? [bind:
    > 1->USER_ID:-2]
    > 2010-09-29 14:32:41,894 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > returned 1 row. - took 1 ms.
    > 2010-09-29 14:32:41,894 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > 2010-09-29 14:32:41,895 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 1 query.
    > 2010-09-29 14:32:41,895 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,895 INFO [org.apache.cayenne.access.QueryLogger] -
    > SELECT t0.ROLE_ID, t0.PERMISSION FROM SHIRO_ROLE_PERMISSION t0 WHERE
    > t0.ROLE_ID = ? [bind: 1->ROLE_ID:-1]
    > 2010-09-29 14:32:41,896 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > returned 2 rows. - took 1 ms.
    > 2010-09-29 14:32:41,896 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > 2010-09-29 14:32:41,897 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 1 query.
    > 2010-09-29 14:32:41,897 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,898 INFO [org.apache.cayenne.access.QueryLogger] -
    > SELECT DISTINCT t0.ID, t0.USERNAME, t0.EMAIL, t0.PASSWORD, t0.VERSION FROM
    > SHIRO_USER t0 JOIN SHIRO_USER_ROLE t1 ON (t0.ID = t1.USER_ID) WHERE
    > t1.ROLE_ID = ? [bind: 1->ROLE_ID:-1]
    > 2010-09-29 14:32:41,898 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > returned 1 row. - took 1 ms.
    > 2010-09-29 14:32:41,898 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > 2010-09-29 14:32:41,901 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 4 queries.
    > 2010-09-29 14:32:41,902 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,902 INFO [org.apache.cayenne.access.QueryLogger] -
    > DELETE FROM SHIRO_USER_ROLE WHERE ROLE_ID = ? AND USER_ID = ?
    > 2010-09-29 14:32:41,903 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ROLE_ID:-2, 2->USER_ID:-1]
    > 2010-09-29 14:32:41,903 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,903 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ROLE_ID:-1, 2->USER_ID:-1]
    > 2010-09-29 14:32:41,904 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,904 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ROLE_ID:-2, 2->USER_ID:-3]
    > 2010-09-29 14:32:41,904 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,904 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ROLE_ID:-2, 2->USER_ID:-2]
    > 2010-09-29 14:32:41,905 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,905 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ROLE_ID:-2, 2->USER_ID:1200]
    > 2010-09-29 14:32:41,905 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,905 INFO [org.apache.cayenne.access.QueryLogger] -
    > DELETE FROM SHIRO_ROLE_PERMISSION WHERE PERMISSION = ? AND ROLE_ID = ?
    > 2010-09-29 14:32:41,906 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->PERMISSION:'secure', 2->ROLE_ID:-1]
    > 2010-09-29 14:32:41,906 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,906 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->PERMISSION:'none', 2->ROLE_ID:-2]
    > 2010-09-29 14:32:41,907 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,907 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->PERMISSION:'admin', 2->ROLE_ID:-1]
    > 2010-09-29 14:32:41,907 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,908 INFO [org.apache.cayenne.access.QueryLogger] -
    > DELETE FROM SHIRO_USER WHERE ID = ?
    > 2010-09-29 14:32:41,908 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ID:1200]
    > 2010-09-29 14:32:41,909 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,909 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ID:-1]
    > 2010-09-29 14:32:41,909 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,910 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ID:-3]
    > 2010-09-29 14:32:41,910 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,910 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ID:-2]
    > 2010-09-29 14:32:41,911 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,911 INFO [org.apache.cayenne.access.QueryLogger] -
    > DELETE FROM SHIRO_ROLE WHERE ID = ?
    > 2010-09-29 14:32:41,911 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ID:-1]
    > 2010-09-29 14:32:41,912 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,912 INFO [org.apache.cayenne.access.QueryLogger] -
    > [bind: 1->ID:-2]
    > 2010-09-29 14:32:41,913 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > updated 1 row.
    > 2010-09-29 14:32:41,914 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > ***** what does happen if the entity doesn't exist? *****
    > 2010-09-29 14:32:41,915 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 1 query.
    > 2010-09-29 14:32:41,915 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,916 INFO [org.apache.cayenne.access.QueryLogger] -
    > SELECT t0.ID, t0.USERNAME, t0.EMAIL, t0.PASSWORD, t0.VERSION FROM
    > SHIRO_USER t0 WHERE t0.ID = ? [bind: 1->ID:1200]
    > 2010-09-29 14:32:41,916 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > returned 0 rows. - took 1 ms.
    > 2010-09-29 14:32:41,917 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > ===========testAddUserRole======
    > 2010-09-29 14:32:41,918 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > will run 1 query.
    > 2010-09-29 14:32:41,919 INFO [org.apache.cayenne.access.QueryLogger] - ---
    > transaction started.
    > 2010-09-29 14:32:41,919 INFO [org.apache.cayenne.access.QueryLogger] -
    > SELECT t0.ID, t0.USERNAME, t0.EMAIL, t0.PASSWORD, t0.VERSION FROM
    > SHIRO_USER t0 WHERE t0.ID = ? [bind: 1->ID:-2]
    > 2010-09-29 14:32:41,920 INFO [org.apache.cayenne.access.QueryLogger] - ===
    > returned 0 rows. - took 1 ms.
    > 2010-09-29 14:32:41,920 INFO [org.apache.cayenne.access.QueryLogger] - +++
    > transaction committed.
    > Tests run: 7, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.584 sec
    > <<< FAILURE!
    >
    > Results :
    >
    > Tests in error:
    >
    > testAddUserRole(com.google.constructor.extras.security.shiro.cayenne.UserCayenneTest)
    >
    >

    Is there anything wrong with my configuration?
    You can try it just checking out the project[2] (Apache License 2.0):
    svn checkout
    http://construtor.googlecode.com/svn/trunk/click-orm-integration coi
    cd coi/orm
    mvn sql:execute ---> will create a H2 database in the data folder
    mvn clean test -Dtest=UserCayenneTest

    It is a multi-module maven project:

    # orm/ =======> JPA and Cayenne implementation of IService
                             =======> ShiroJPARealm a little implementation of
    Shiro framework (used on rolesecurity module example)
                             =======> ShiroCayenneRealm a little implementation
    of Shiro framework (doesn't have module example, just test for now)
    # rolesecurity/ =======> rolesecurity module example showing how to setup
    Apache Shiro with click and demonstrate the ShiroJPARealm use.

    Hope someone has time to take a look on it.

    Regards,

    Gilberto

    PS: Why does cayenne not do a rollback when occurs an exception? See the the
    comment test method in the UserCayenneTest class.

    [1]http://dl.dropbox.com/u/9093640/ObjRelationshipInspector2.png
    [2]http://code.google.com/p/construtor/

    -- 
    View this message in context: http://cayenne.195.n3.nabble.com/many-to-many-relation-tp3491p1603892.html
    Sent from the Cayenne - User mailing list archive at Nabble.com.
    



    This archive was generated by hypermail 2.0.0 : Wed Sep 29 2010 - 18:08:23 UTC