I'm working on an application that was set up by someone else in our company.  He says this is correct, but I don't believe so.  Please settle the argument.
We have Groups and Users.  Groups has a list of users, users have a list of groups.  Below are the tops of both entities:
@Entity
@Name("usergroup")
public class UserGroup extends AbstractEntity
{
        private static final long serialVersionUID = 1L;
        private String name;
        
        @OneToMany(mappedBy="groups")
        @JoinTable(joinColumns={@JoinColumn(name="groups_id")})
        private List<User> members = new ArrayList<User> ();
...@Entity
@Name("user")
@Scope(ScopeType.SESSION)
public class User extends AbstractEntity
{
        private static final long serialVersionUID = 1L;
        @Column(unique=true)
        private String username;
        private String password;
        
        @OneToMany
        @JoinTable(joinColumns={@JoinColumn(name="members_id")})
        private List<AuthGroup> groups = new ArrayList<AuthGroup> ();
...AbstractEntity just has the id and uid properties for entities so we weren't replicating code.
Should both mappings be @OneToMany?  are the joins done correctly?  do we need to define updatable/insertable like this post says: Bidrectional List
Also, should user be ScopeType.SESSION?  It's used for actual authentication into our application.
I just think this is causing a lot of our issues, because we have to always do stuff like:
user.getGroups().add(newGroup);
newGroup.getMembers().add(user);