I guess it's possible to do it in some other way, but IMHO a bidirectional mapping with inverse="true" on the parent side is what one usually wants.
Think about how you do a one-to-many relationship in the database: On the "many" (children, or Address in your case) end, you have a column which is a foreign key to the "one" (parent, or Person in your case) end.
As you see, you still need to store the parent id with every child. So by making the mapping bidirectional, you don't lose any space or anything like that. OTOH you gain a great deal of convenience, since you can now retrieve the parent directly from java code without having to do a query.
If your usage scenario involves retrieving addresses, and not caring about who lives at the particular address, you might want to check out having the parent (Person) loaded lazily by proxy and possibly also disabling outer join fetching for the parent. That way the Person object won't be retrieved unless it is necessary.
Quote:
Does that mean that now my Address class will need a Person instance in it ? I dont want that. I just want to add a bunch of addresses into the Person object and save Person and have the Addresses saved as well.
Hopefully I don't come across as rude, but you are aware that in Java objects are call-by-reference, right?