It seems the problem is caused by the FetchType=EAGER parameter in ElementCollection. Changing to LAZY fixes the problem (but results in other issues instead).