This two entities has one-to-one relationships between each others. As this program shows, a User entity object has-a one BillingInfo object.
I think the relationship occurs between the primary key field of each entities. Am I correct on this?
If yes, then how it is possible to have different types for those fields.
(I mean, the primary key field of "User" entity is a "String" value, but in BillingInfo, it is a "Long" value).
Your example describes a bidirectional one-to-one relationship. As such the table of the
owning side (the one without "mappedBy") has the foreign key (see JPA spec 2.1.7).
So in your example table User contains the primary key from table BillingInfo as
foreign key.