Ik kwam hier op zoek naar dezelfde antwoorden. Het probleem blijkt dat JPA niet weet dat je object vuil is. Dit is opgelost door de equals()/hashcode()-methoden op deze complexe objecten te implementeren. Implementeer in uw voorbeeld gelijken en hashcode voor ProjectProperty
Zodra dat is gebeurd, kan JPA via deze methoden vaststellen dat het onderliggende object vuil is en converteert en blijft bestaan.