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