• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 758
  • Last Modified:

Using Hibernate with a link table

Hi.
I have a pretty complex problem and i'm not sure how to map it.

I have a standard tomcat User & UserRoles tables setup.
I also have what's going to be an event/class scheduler with the tables Event & EventInstructor

the schema looks like this:

 ----------       -------------------
|   User   |     |   User_Role    |
 ----------       -------------------
| ID (int) |     | ID (int)           |
| Name   |     | user_id (int)   |
| ...        |     | role (varchar) |
 ----------       -------------------
 

 ----------       -----------------------
|   Event  |     |  Event_Instructor |
 ----------       -----------------------
| ID (int) |     | instructor_id (int) |
| Name   |     | event_id (int)       |
| ...        |      -----------------------
 ----------


Problem #1:
How do i map the Event & User using the Event_Instrucotr table?
I've looked at some posts about many-to-many, but my problem is that and event may or may not have an instructor, but if it does it can only have 1.

Problem #2:
An instructor is a User who has the role "instructor" in the User_Role table.
Not sure how to get only these Users to map to the Event_Instructor table.

Again, and event may or may not have up to 1 instructor, but and instructor can have many events.

Can anyone help me map this?

Thanks!

- Jonathan
0
jdoklovic
Asked:
jdoklovic
1 Solution
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
Problem #1:
How do i map the Event & User using the Event_Instrucotr table?
I've looked at some posts about many-to-many, but my problem is that and event may or may not have an instructor, but if it does it can only have 1.

I assume that INSTRUCTORID should have the value of USER id, which shall be implemented by defining INSTRUCTORID being a foreign key to userid (in table user). The value can be null, which indicates no instructor.

Problem #2:
An instructor is a User who has the role "instructor" in the User_Role table.
Not sure how to get only these Users to map to the Event_Instructor table.

IN RDBMS like SQL Server and Oracle, I would use contraints or triggers to validate this requirements. In MySQL, there are no triggers unless you use MaxDB by MySQL...

So unless you have a DBMS Version that allows triggers, you need to solve this on application level.

CHeers
0
 
petoskey-001Commented:
----------              -------------------
|   User   |           |   User_Role    |
 ----------             -------------------
| ID (int) | <---    | ID (int)           |
| Name   |       |--| user_id (int)   |
| ...        |           | role (varchar) |
 ----------             -------------------
 

 ----------       -----------------------
|   Event  |     |  Event_Instructor |
 ----------       -----------------------
| ID (int) |     | instructor_id (int) |
| Name   |     | event_id (int)       |
| ...        |      -----------------------



Problem #1:
How do i map the Event & User using the Event_Instrucotr table?
I've looked at some posts about many-to-many, but my problem is that and event may or may not have an instructor, but if it does it can only have 1.

Problem #2:
An instructor is a User who has the role "instructor" in the User_Role table.
Not sure how to get only these Users to map to the Event_Instructor table.

Again, and event may or may not have up to 1 instructor, but and instructor can have many events.
-----------------------------------------------------------------
As stated you can't enforce specific links based on data without triggers to check things.  You can't force Event_Instroctor to link to User_Role with a value of Instructor.  You'll have to put that logic in your middleware or application.

BUT it appears to me that you don't really need the Event_Instructor table.  Each event would point to the User_Role table for their instructor.  Again you would have to check that they were an instructor if code elsewhere, but you don't really need a separate table.  Just put any extra fields from the event_instructor table into the event.

So the linking would look like this...  

  USERS <--- USER_ROLES <--- EVENT

That sounds like it would work based on what you've mentioned so far.  
 
0

Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now