JPA OneToOne with Primary Key FK Question

View: New views
3 Messages — Rating Filter:   Alert me  

JPA OneToOne with Primary Key FK Question

by tch :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I'm having a hard time with a OneToOne with a Primary Key as Foriegn
Key relationship.

The secondary table is not getting the PK set, it's going in as null,
instead of grabbing

Here's the EO's.

Account and AccountDetails

They both share account_id as PK's.

I set the relationships on both sides and persist the account object,
the insert on the account_details fails with a null account_id.

Account
---
public class Accounts extends CreatedByModifiedByBaseEntity implements
Serializable {
        @Id
        @GeneratedValue(generator="ACCOUNT_ID_SEQ",strategy=GenerationType.SEQUENCE)
        @SequenceGenerator(name="ACCOUNT_ID_SEQ",sequenceName="crm.\"ACCOUNT_ID_SEQ\"",allocationSize=1)
        @Column(name="account_id")
        private Long accountId;

        @OneToOne(mappedBy="accountId",cascade=PERSIST)
        private AccountDetails accountDetails;

Account_Details
---
public class AccountDetails extends ModifiedByBaseEntity implements
Serializable {
        @Id
        @Column(name="account_id")
        private Long accountId2;

        @OneToOne
        @PrimaryKeyJoinColumn
        private Accounts accountId;

--
./tch
_______________________________________________
eclipselink-users mailing list
eclipselink-users@...
https://dev.eclipse.org/mailman/listinfo/eclipselink-users

Re: JPA OneToOne with Primary Key FK Question

by James Sutherland :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

The issue is that you need to set the AccountDetails accountId2, it will not be set for you.  You can do this by first persisting the Account, then creating the AccountDetails and setting its' account and accountId2 to the Account.  You might also be able to do this in an event.

see,
http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Primary_Keys_through_OneToOne_Relationships


Tim Hollosy wrote:
I'm having a hard time with a OneToOne with a Primary Key as Foriegn
Key relationship.

The secondary table is not getting the PK set, it's going in as null,
instead of grabbing

Here's the EO's.

Account and AccountDetails

They both share account_id as PK's.

I set the relationships on both sides and persist the account object,
the insert on the account_details fails with a null account_id.

Account
---
public class Accounts extends CreatedByModifiedByBaseEntity implements
Serializable {
        @Id
        @GeneratedValue(generator="ACCOUNT_ID_SEQ",strategy=GenerationType.SEQUENCE)
        @SequenceGenerator(name="ACCOUNT_ID_SEQ",sequenceName="crm.\"ACCOUNT_ID_SEQ\"",allocationSize=1)
        @Column(name="account_id")
        private Long accountId;

        @OneToOne(mappedBy="accountId",cascade=PERSIST)
        private AccountDetails accountDetails;

Account_Details
---
public class AccountDetails extends ModifiedByBaseEntity implements
Serializable {
        @Id
        @Column(name="account_id")
        private Long accountId2;

        @OneToOne
        @PrimaryKeyJoinColumn
        private Accounts accountId;

--
./tch

Re: JPA OneToOne with Primary Key FK Question

by tch :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Thanks James, seems that particular model is not well suited to a
@OneToOne, we ended up implementing with a @SecondaryTable annotation
and that worked perfectly with minimal hassle.

Thanks,
Tim

On Wed, Jun 18, 2008 at 10:01 AM, James Sutherland <jamesssss@...> wrote:

>
> The issue is that you need to set the AccountDetails accountId2, it will not
> be set for you.  You can do this by first persisting the Account, then
> creating the AccountDetails and setting its' account and accountId2 to the
> Account.  You might also be able to do this in an event.
>
> see,
> http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Primary_Keys_through_OneToOne_Relationships
>
>
>
> Tim Hollosy wrote:
>>
>> I'm having a hard time with a OneToOne with a Primary Key as Foriegn
>> Key relationship.
>>
>> The secondary table is not getting the PK set, it's going in as null,
>> instead of grabbing
>>
>> Here's the EO's.
>>
>> Account and AccountDetails
>>
>> They both share account_id as PK's.
>>
>> I set the relationships on both sides and persist the account object,
>> the insert on the account_details fails with a null account_id.
>>
>> Account
>> ---
>> public class Accounts extends CreatedByModifiedByBaseEntity implements
>> Serializable {
>>       @Id
>>
>> @GeneratedValue(generator="ACCOUNT_ID_SEQ",strategy=GenerationType.SEQUENCE)
>>
>> @SequenceGenerator(name="ACCOUNT_ID_SEQ",sequenceName="crm.\"ACCOUNT_ID_SEQ\"",allocationSize=1)
>>       @Column(name="account_id")
>>       private Long accountId;
>>
>>       @OneToOne(mappedBy="accountId",cascade=PERSIST)
>>       private AccountDetails accountDetails;
>>
>> Account_Details
>> ---
>> public class AccountDetails extends ModifiedByBaseEntity implements
>> Serializable {
>>       @Id
>>       @Column(name="account_id")
>>       private Long accountId2;
>>
>>       @OneToOne
>>       @PrimaryKeyJoinColumn
>>       private Accounts accountId;
>>
>> --
>> ./tch
>>
>
>
> -----
> ---
> http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
> http://www.eclipse.org/eclipselink/
>  EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
> TopLink
> Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink ,
> http://wiki.oracle.com/page/TopLink TopLink
> Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
> http://www.nabble.com/EclipseLink-f26430.html EclipseLink
> Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
> --
> View this message in context: http://www.nabble.com/JPA-OneToOne-with-Primary-Key-FK-Question-tp17937146p17983350.html
> Sent from the EclipseLink - Users mailing list archive at Nabble.com.
>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@...
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>



--
./tch
_______________________________________________
eclipselink-users mailing list
eclipselink-users@...
https://dev.eclipse.org/mailman/listinfo/eclipselink-users