 <p><strong>You can't <em>change</em> the ID of an entity</strong>. The ID uniquely identifies an entity object. Different ID = different entity object. You can manually edit the value of the annotated <code>@Id</code> column in the database, sure; but for all purposes, that record is now a <em>different</em> entity object, because it has a different ID.<br> For any framework to <em>know</em> that your <code>User</code> is the same <code>User</code> despite having a different ID, there'd have to exist some other internal column that could be used to identify the User. Something like "oh, ok, the <code>openID</code> is different but the <code>socialSecurityNumber</code> is the same, so it's the same <code>User</code>". But then again, your ID would not be the <code>openID</code> field: you'd have to annotate <code>socialSecurityNumber</code> as the actual <code>@Id</code> so the framework knows.</p> <p>And in fact, in your example you're doing this:</p> <pre><code>User user = userRepo.findOne("o3sVZuA4p81wG24ph5Z5lmnrVhlc"); </code></pre> <p>So it seems like you <em>do</em> have a unique ID <code>"o3sVZuA4p81wG24ph5Z5lmnrVhlc"</code>, it's only that you haven't declared it in your <code>User</code>.</p> <p>Just remove the <code>@Id</code> annotation from <code>openId</code> and declare that other field as <code>@Id</code>. That way you'd be able to update the <code>openID</code> of any <code>User</code> and have it reflected in every <code>Gift</code> too.</p>