![]() | ![]() |
![]() |
| Project | Ver 1.1 | Ver 1.2 | JDO | JPA | Guides | Tools |
| 1.2 | Persistence | JDO ORM | JPA ORM | Runtime | JDO Runtime | JPA Runtime | Extensions | Developer |
![]() You have a 1-to-1 relationship when an object of a class has an associated object of another class (only one associated object). It could also be between an object of a class and another object of the same class (obviously). You can create the relationship in 2 ways depending on whether the 2 classes know about each other (bidirectional), or whether only one of the classes knows about the other class (unidirectional). These are described below.
For this case you could have 2 classes, User and Account, as below.
<entity-mappings>
<entity class="User">
<table name="USER"/>
<attributes>
<id name="id">
<column name="USER_ID"/>
</id>
<basic name="login">
<column name="LOGIN" length="20"/>
</basic>
</entity>
<entity class="Account">
<table name="ACCOUNT"/>
<attributes>
<id name="id">
<column name="ACCOUNT_ID"/>
</id>
<basic name="firstName">
<column name="FIRSTNAME" length="50"/>
</basic>
<basic name="secondName">
<column name="LASTNAME" length="50"/>
</basic>
<one-to-one name="user">
<join-column name="USER_ID"/>
</one-to-one>
</attributes>
</entity>
</entity-mappings>
This will create 2 tables in the database, one for User (with name USER), and one for
Account (with name ACCOUNT and a column USER_ID), as shown below.
Things to note :-
For this case you could have 2 classes, User and Account again, but this time as below. Here the Account class knows about the User class, and also vice-versa. ![]() We create the 1-1 relationship with a single foreign-key. To do this you define the MetaData as
<entity-mappings>
<entity class="User">
<table name="USER"/>
<attributes>
<id name="id">
<column name="USER_ID"/>
</id>
<basic name="login">
<column name="LOGIN" length="20"/>
</basic>
<one-to-one name="account" mapped-by="user"/>
</attributes>
</entity>
<entity class="Account">
<table name="ACCOUNT"/>
<attributes>
<id name="id">
<column name="ACCOUNT_ID"/>
</id>
<basic name="firstName">
<column name="FIRSTNAME" length="50"/>
</basic>
<basic name="secondName">
<column name="LASTNAME" length="50"/>
</basic>
<one-to-one name="user">
<join-column name="USER_ID"/>
</one-to-one>
</attributes>
</entity>
</entity-mappings>The difference is that we added mapped-by to the field of User. This will create 2 tables in the database, one for User (with name USER), and one for Account (with name ACCOUNT including a USER_ID). The fact that we specified the mapped-by on the User class means that the foreign-key is created in the ACCOUNT table. Things to note :-
![]() |