Дойдох тук, търсейки същите отговори. Оказва се, че проблемът е, че JPA не знае, че вашият обект е мръсен. Това беше решено чрез прилагане на методи equals()/hashcode() върху тези сложни обекти. Във вашия пример внедрете equals и хешкод за ProjectProperty
След като това бъде направено, JPA е в състояние да идентифицира чрез тези методи, че основният обект е мръсен и се преобразува и продължава да съществува.