• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

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

 
Ranch Hand
Posts: 231
1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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!
 
author and cow tipper
Posts: 5009
1
Hibernate Spring Tomcat Server
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
Posts: 231
1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
Posts: 5009
1
Hibernate Spring Tomcat Server
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
Posts: 231
1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
Posts: 5009
1
Hibernate Spring Tomcat Server
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
Posts: 231
1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
Posts: 5009
1
Hibernate Spring Tomcat Server
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
reply
    Bookmark Topic Watch Topic
  • New Topic