wood burning stoves 2.0*
The moose likes Object Relational Mapping and the fly likes How to do JPA OneToOne relationship insert only one side of the relation Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of The Java EE 7 Tutorial Volume 1 or Volume 2 this week in the Java EE forum
or jQuery UI in Action in the JavaScript forum!
JavaRanch » Java Forums » Databases » Object Relational Mapping
Bookmark "How to do JPA OneToOne relationship insert only one side of the relation" Watch "How to do JPA OneToOne relationship insert only one side of the relation" New topic
Author

How to do JPA OneToOne relationship insert only one side of the relation

Raul De Villa
Greenhorn

Joined: Sep 03, 2012
Posts: 2


Hi folks.

In this moment I'm having a problem with my JPA implementation. I have two Entities as following:

Entity Position



Entity Employee



In the other hand I have this Session Bean:

Remote Interface


Remote Interface Implementation



The previous code includes the class Sequence. By the moment it only generates a secuential value for using as primary key for the entity Employee.

This is the content of the file persistence.xml



This is my test class:



And finally, this is the database script:


Before I executed test class EmployeeTest, I inserted one row in the table tbl_positions like this:


Because tbl_positions is a catalog and it most not be created when I create an Employee.

My problem arise when I executed the test class EmployeeTest. When I invoke the method service.createEmployee(employee), I get the exception: Duplicate entry '1' for key 'PRIMARY' referencing the table tbl_positions. This is a problem for me because what I need is that if a Position already exists, it only creates the Employee. Even better, for business constraints when I create an Employee, all the Positions must exist.

Thanks for any help about it !!

Best tegards,
RADE
James Boswell
Bartender

Joined: Nov 09, 2011
Posts: 1012
    
    5

Your problem is because of the cascade type:

So when you attempt to create an Employee with position 1, it cascades this and attempts to create a Position with ID 1 which breaks the primary key constraint as there is already a row with this ID.
Try this instead:
Raul De Villa
Greenhorn

Joined: Sep 03, 2012
Posts: 2


Excellent James !!... this solves my problem !

Thank you very much !
E Armitage
Rancher

Joined: Mar 17, 2012
Posts: 892
    
    9
Why are you assigning some Ids manually?
Better let the persistence provider take care of persistence Ids.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: How to do JPA OneToOne relationship insert only one side of the relation