Solved

Using Hibernate with a link table

Posted on 2004-09-29
2
743 Views
Last Modified: 2008-01-09
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
Comment
Question by:jdoklovic
2 Comments
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
Comment Utility
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
 
LVL 7

Accepted Solution

by:
petoskey-001 earned 500 total points
Comment Utility
----------              -------------------
|   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

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Join & Write a Comment

Loading csv or delimited data files to MySQL database is a very common task frequently questioned about and almost every time LOAD DATA INFILE comes to the rescue. Here we will try to understand some of the very common scenarios for loading data …
Introduction Since I wrote the original article about Handling Date and Time in PHP and MySQL (http://www.experts-exchange.com/articles/201/Handling-Date-and-Time-in-PHP-and-MySQL.html) several years ago, it seemed like now was a good time to updat…
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now