aspose file tools*
The moose likes Object Relational Mapping and the fly likes How to Set Primary / Foreign Keys or Relationships with Hibernate 3 / JPA Tables? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Databases » Object Relational Mapping
Bookmark "How to Set Primary / Foreign Keys or Relationships with Hibernate 3 / JPA Tables?" Watch "How to Set Primary / Foreign Keys or Relationships with Hibernate 3 / JPA Tables?" New topic
Author

How to Set Primary / Foreign Keys or Relationships with Hibernate 3 / JPA Tables?

James Dekker
Ranch Hand

Joined: Dec 09, 2006
Posts: 215
Hello there...

Created 3 JPA annotated classes:

User:


Device:


Token:


Am trying to set up ER relationships in Hibernate 3 / JPA (or even in MySQL 5) like this:

User has one to many Devices.

User.userid (Primary Key)
Device.id (Primary Key)

Device has one to one relationship with Token.

Device.id (Primary Key)
Token.id (Primary Key)

Question(s):

(1) How do I set these up in Hibernate3 or MySQL5 code?

(2) Am very new with SQL so would it be that the Device.id is the foreign key of User.userid and vice versa with Device and Token?

Am very new to Hibernate 3 / JPA so would appreciate it if someone could help...

Thank you and happy programming!
Cameron Wallace McKenzie
author and cow tipper
Saloon Keeper

Joined: Aug 26, 2006
Posts: 4968
    
    1

So, you'll need instance variables:
User has one to many Devices.


So, the User class will has a List of devices, List devices = new ArrayList(); Put in setters and getters. Device will have an instance of a User. Then add your JPA annotations like usual.

Device has one to one relationship with Token.


Add instance variables - Devices has an instance of a Token, and a Token has an instance of a Device. Then perform the annotation mapping as usual with any one-to-one association.

Here's a good tutorial on mapping one-to-one relations with Hibernate and JPA:

Mapping Associations with the Java Persistence API

There's a discussion of one-to-many mappings on that site as well.

Keep asking questions, and let us know how you're getting along, including code snippets and any errors you have.

-Cameron McKenzie


James Dekker
Ranch Hand

Joined: Dec 09, 2006
Posts: 215
Cameron,

Yes, I checked out the tutorial and got my code working!

The tutorial does throw an exception however...

Created my tables like this:





Exam:


ExamDetail:


ExamApp:



When you run ExamApp this is what happens:



Question(s):

(1) In the CreateExam.sql query, you stated to place this:

KEY FK2FB81FB83A97F5 (detail_id),
CONSTRAINT FK2FB81FB83A97F5

What is the FK2FB81FB83A97F5 for and where do I create values like this for my own foreign keys?

(2) What is causing the exception?

Thank you for everything!

-James
Cameron Wallace McKenzie
author and cow tipper
Saloon Keeper

Joined: Aug 26, 2006
Posts: 4968
    
    1

Well, in this case, you just forgot to add the Exam and ExamDetail to the HibernateConfig in the HibernateUtil class:



Creating a HibernateUtil Class

-Cameron McKenzie

James Dekker
Ranch Hand

Joined: Dec 09, 2006
Posts: 215
Cameron,

Thank you for your help! You stated these fields in your tutorial:

KEY FK2FB81FB83A97F5 (detail_id),
CONSTRAINT FK2FB81FB83A97F5

What is the FK2FB81FB83A97F5 for and where do I create values like this for my own foreign keys?

-James
Cameron Wallace McKenzie
author and cow tipper
Saloon Keeper

Joined: Aug 26, 2006
Posts: 4968
    
    1

Oh, I have no idea what those are. I think it's just the identifier MySQL gives to the foreign key constraint. With the various classes added to the Hibernate Config, you can have Hibernate create your database tables for you.


Creating Tables with the SchemaExport create

-Cameron McKenzie


James Dekker
Ranch Hand

Joined: Dec 09, 2006
Posts: 215
Okay, cool... Thank you! I've used the SchemaExport mechanism before but still felt safer by creating tables in MySQL by using the scripts.

-James
Cameron Wallace McKenzie
author and cow tipper
Saloon Keeper

Joined: Aug 26, 2006
Posts: 4968
    
    1

The nice thing is that the log files actually show you the scripts. In fact, I think if you do create(true,false) or something like that, it spits out the script in the log file, but doesn't actually connect to the database and create the tables, so you can see exactly what SQL, and it is SQL, that Hibernate will use. It's a great feature if you can do a 'top down' database design.

-Cameron McKenzie
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: How to Set Primary / Foreign Keys or Relationships with Hibernate 3 / JPA Tables?