This behavior is documented in the User Guide. Hibernate cannot tell whether to assign a null or a Proxy object unless it loads the mappedBy @OneToOne association eagerly. So, there are two options to handle this Java language limitation: 1. use bytecode enhancement. 2. remove the parent-side @OneToOne since you don't really need it if you are using @MapsId |