Buggy code:
@ Entity @ Table ( name = "users" ) @ XmlRootElement ( name = "user" ) @ IgnoreMediaTypes ( "application//*+json" ) public class User { private Integer id ; private String userName ; private String displayName ; private String password ; private String email ; private Date registrationDate ; private String company ; private boolean oauth2 = false ; private List < Store > storesCreated ; private List < Store > storesModified ; private List < Description > descriptionsCreated ; private List < Description > descriptionsModified ; private List < Offering > bookmarks ; private List < Review > reviews ; @ Id @ GeneratedValue ( strategy = IDENTITY ) @ Column ( name = "id" , unique = true , nullable = false ) @ XmlTransient public Integer getId ( ) { } public void setId ( Integer id ) { } @ XmlID @ XmlAttribute @ Column ( name = "user_name" , unique = true , nullable = false ) public String getUserName ( ) { } public void setUserName ( String userName ) { } @ XmlElement @ Column ( name = "display_name" ) public String getDisplayName ( ) { } public void setDisplayName ( String displayName ) { } @ XmlElement @ XmlJavaTypeAdapter ( HiddenFieldsXMLAdapter . class ) @ Column ( name = "email" , unique = true , nullable = false ) public String getEmail ( ) { } public void setEmail ( String email ) { } @ XmlElement @ XmlJavaTypeAdapter ( HiddenFieldsXMLAdapter . class ) @ Column ( name = "password" , nullable = false ) public String getPassword ( ) { } public void setPassword ( String password ) { } @ XmlElement @ Column ( name = "registration_date" , nullable = false ) public Date getRegistrationDate ( ) { } public void setRegistrationDate ( Date registrationDate ) { } @ XmlElement @ Column ( name = "company" ) public String getCompany ( ) { } public void setCompany ( String company ) { } @ XmlTransient @ Column ( name = "oauth2" ) public boolean isOauth2 ( ) { } public void setOauth2 ( boolean oauth2 ) { } @ XmlTransient @ OneToMany ( mappedBy = "creator" , cascade = CascadeType . ALL , fetch = FetchType . LAZY ) public List < Store > getStoresCreated ( ) { } public void setStoresCreated ( List < Store > storesCreated ) { } @ XmlTransient @ OneToMany ( mappedBy = "lasteditor" , cascade = CascadeType . ALL , fetch = FetchType . LAZY ) public List < Store > getStoresModified ( ) { } public void setStoresModified ( List < Store > storesModified ) { } @ XmlTransient @ OneToMany ( mappedBy = "creator" , cascade = CascadeType . ALL , fetch = FetchType . LAZY ) public List < Description > getDescriptionsCreated ( ) { } public void setDescriptionsCreated ( List < Description > descriptionsCreated ) { } @ XmlTransient @ OneToMany ( mappedBy = "lasteditor" , cascade = CascadeType . ALL , fetch = FetchType . LAZY ) public List < Description > getDescriptionsModified ( ) { } public void setDescriptionsModified ( List < Description > descriptionsModified ) { } @ XmlTransient <START_BUG> @ ManyToMany ( cascade = CascadeType . ALL , fetch = FetchType . LAZY ) <END_BUG> @ JoinTable ( name = "bookmarks" , joinColumns = { @ JoinColumn ( name = "user_id" , referencedColumnName = "id" ) } , inverseJoinColumns = { @ JoinColumn ( name = "offering_id" , referencedColumnName = "id" ) } ) public List < Offering > getBookmarks ( ) { return bookmarks ; } public void setBookmarks ( List < Offering > bookmarks ) { } @ XmlTransient @ OneToMany ( mappedBy = "user" , cascade = CascadeType . ALL , fetch = FetchType . LAZY ) public List < Review > getReviews ( ) { } public void setReviews ( List < Review > reviews ) { } @ Override public int hashCode ( ) { } @ Override public boolean equals ( Object obj ) { } }

Fix:
@ ManyToMany ( fetch = FetchType . LAZY )