Hi, all.

Our project has been going along well with iBatis and we have already rolled out 5 of 7 modules. They like us to automate as much as possible and not have the users going to multiple screens to do something, so that is where we ran into the problem. This is for a Oracle database and I am learning PL/SQL and SQL as I build this application, so I don't know if there is something in PL/SQL or SQL that would do this and not in iBatis. I have been doing searches to see if anyone has an example of how to do this in PL/SQL or SQL, but apparently I am not searching correctly.

When I create a group, I want to create entries in multiple tables. A entry in the group table, a entry for the group's leader in a group member table, a entry for the group leader in the user roles table indicating he has the group administrator role and, finally, another entry in the user roles table if a backup group administrator is entered at group creation time.

This is the bean that I pass to the insert function.

public class GroupCreate extends BaseBean implements TransferObject
{
    static final long serialVersionUID = 0;
private Group group;
    private UserGroup userGroup;
    private UserRole userRole1;
    private UserRole userRole2;
public GroupCreate()
    {
        group = null;
        userGroup = null;
        userRole1 = null;
        userRole2 = null;
    }
public GroupCreate(Group group, UserGroup userGroup, UserRole userRole1, UserRole userRole2)
    {
        this.group = group;
        this.userGroup = userGroup;
        this.userRole1 = userRole1;
        this.userRole2 = userRole2;
    }
public Group getGroup()
    {
        return group;
    }
public void setGroup(Group group)
    {
        this.group = group;
    }
public UserGroup getUserGroup()
    {
        return userGroup;
    }
public void setUserGroup(UserGroup userGroup)
    {
        this.userGroup = userGroup;
    }
public UserRole getUserRole1()
    {
        return userRole1;
    }
public void setUserRole1(UserRole userRole1)
    {
        this.userRole1 = userRole1;
    }
public UserRole getUserRole2()
    {
        return userRole2;
    }
public void setUserRole2(UserRole userRole2)
    {
        this.userRole2 = userRole2;
    }
}


In the group.xml, I have the following defined.

<statement id="GroupInsert" parameterClass="scs.reaction.user.beans.GroupCreate">
    BEGIN
    INSERT INTO REACTION_USERS.GROUPS (GROUP_ID,
                                       GROUP_LEADER_ID,
                                       GROUP_NAME,
                                       DESCRIPTION,
                                       CREATED_BY,
                                       CREATED_ON,
                                       MODIFIED_BY,
                                       MODIFIED_ON,
                                       CON_CHECK,
                                       GROUP_ADMINISTRATOR)
                               VALUES (#group.groupID:BIGINT#,
                                       #group.groupLeaderID:BIGINT#,
                                       #group.groupName:VARCHAR#,
                                       #group.description:VARCHAR#,
                                       #group.createdBy:BIGINT#,
                                       #group.createdOn:TIMESTAMP#,
                                       #group.modifiedBy:BIGINT#,
                                       #group.modifiedOn:TIMESTAMP#,
                                       #group.conCheck:BIGINT#,
                                       #group.groupAdministrator:BIGINT#);
    INSERT INTO REACTION_USERS.USER_GROUPS (USER_GROUP_ID,
                                            USER_ID,
                                            GROUP_ID,
                                            MEMBERSHIP_STATUS,
                                            CON_CHECK)
VALUES (#userGroup.userGroupID:BIGINT#,
                                            #userGroup.userID:BIGINT#,
                                            #userGroup.groupID:BIGINT#,
#userGroup.membershipStatus:VARCHAR#,
                                            #userGroup.conCheck:BIGINT#);
    INSERT INTO REACTION_USERS.USER_ROLES (USER_ROLE_ID,
                                           USER_ID,
                                           ROLE_ID,
                                           NETID,
                                           ROLE)
                                   VALUES (#userRole1.userRoleID:BIGINT#,
                                           #userRole1.userID:BIGINT#,
                                           #userRole1.roleID:BIGINT#,
                                           #userRole1.netID:VARCHAR#,
                                           #userRole1.role:VARCHAR#);
    INSERT INTO REACTION_USERS.USER_ROLES (USER_ROLE_ID,
                                           USER_ID,
                                           ROLE_ID,
                                           NETID,
                                           ROLE)
                                   VALUES (#userRole2.userRoleID:BIGINT#,
                                           #userRole2.userID:BIGINT#,
                                           #userRole2.roleID:BIGINT#,
                                           #userRole2.netID:VARCHAR#,
                                           #userRole2.role:VARCHAR#);
    END;
</statement>

This works if a backup group administrator is defined when the group is defined. Otherwise, the last insert will fail because of null values. Is there a way I can set this up to not do the last insert if the userRole2 is null, but do it otherwise? I don't want to set up a seperate id="GroupInsertNoBackup" and another bean that does not have userRole2 in it.

Thanks for any help or pointers you can give me.

Al

Reply via email to