I have a situation where I have a many-to-many bidirectional relationship 
between two entity beans "User" and "Group", where users can belong to many 
groups and groups can have many users.  I want to keep track of the status of 
the relationship itself and still take advantage of automatic table generation 
from source annotations in a database-independent fashion.  For example, a 
user's status in a group could be "invited" or "member" independently for each 
group that the user is related to.  The user is the owning side of the 
relation, although that doesn't seem relevant to me.  It seems to me that what 
I want to do is have another column in the join table and I'm stumped about how 
to do in a clean way and was unable to find anything about this topic; I've 
read Bill Burke's O'Reilly EJB3 book and couldn't think of good search terms 
that would capture this issue.  (I'm also using Seam, although I don't think 
that's germane here.)   I imagine I could hack in another column to !
 the join table with an ALTER TABLE, but that strikes me as a kluge and I don't 
see how I could easily deal with group member status using EJB3.  Does anybody 
have a suggestion?  Pointers on how to do this or to previous discussions of 
this topic gratefully accepted.  

current Group.java


  | ...
  | @Entity
  | @Table(name="GROUPS")
  | public class Group implements Serializable {
  |     
  |     private long   id;
  |     private Set<User> users = new HashSet<User>();
  |     
  |     @Id
  |     @Column(name="GROUP_ID")
  |     @GeneratedValue
  |     public Long getId() {
  |         return id;
  |     }
  |     public void setId(Long id) {
  |         this.id = id;
  |     }
  | 
  |     @ManyToMany(cascade=CascadeType.PERSIST,mappedBy="groups")
  |     public Set<User> getUsers() {
  |         return users;
  |     }
  |     public void setUsers( Set<User> users ) {
  |         this.users = users;
  |     }
  |     
  |     ...    
  | }
  | 

current User.java


  | ...
  | @Entity
  | @Table(name="USERS")
  | public class User implements Serializable {
  | 
  |     private long   id;
  |     private Set<Group> groups = new HashSet<Group>();
  |     
  |     @Id
  |     @Column(name="USER_ID")
  |     @GeneratedValue
  |     public Long getId() {
  |         return id;
  |     }
  |     public void setId(Long id) {
  |         this.id = id;
  |     }
  |     
  |     @ManyToMany(cascade=CascadeType.PERSIST)
  |     @JoinTable(name="USER_GROUP",
  |                [EMAIL PROTECTED](name="USER_ID")},
  |                [EMAIL PROTECTED](name="GROUP_ID")})
  |     public Set<Group> getGroups() {
  |         return groups;
  |     }
  |     public void setGroups( Set<Group> groups ) {
  |         this.groups = groups;
  |     }
  | 
  |     ...    
  | }
  | 

currently generated schema:

anonymous wrote : 
  | 2006-07-27 19:15:53,790 DEBUG [org.hibernate.tool.hbm2ddl.SchemaExport] 
create table GROUPS (GROUP_ID bigint generated by default as identity (start 
with 1), ..., primary key (GROUP_ID))
  | 2006-07-27 19:15:53,790 DEBUG [org.hibernate.tool.hbm2ddl.SchemaExport] 
create table USERS (USER_ID bigint generated by default as identity (start with 
1), ..., primary key (USER_ID))
  | 2006-07-27 19:15:53,790 DEBUG [org.hibernate.tool.hbm2ddl.SchemaExport] 
create table USER_GROUP (USER_ID bigint not null, GROUP_ID bigint not null, 
primary key (USER_ID, GROUP_ID))
  | 2006-07-27 19:15:53,790 DEBUG [org.hibernate.tool.hbm2ddl.SchemaExport] 
alter table USER_GROUP add constraint FKC62E00EB21CA0D09 foreign key (USER_ID) 
references USERS
  | 2006-07-27 19:15:53,790 DEBUG [org.hibernate.tool.hbm2ddl.SchemaExport] 
alter table USER_GROUP add constraint FKC62E00EB44BDA00B foreign key (GROUP_ID) 
references GROUPS
  | 
  | 


View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3961593#3961593

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3961593

_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to