Only the owning side is written
The same method without employee.getProjects().add(project);:
$ curl -X PUT localhost:8080/api/projects/1/members/2
{"id":1,"name":"Intranet","members":["Jaan Tamm","Kati Karu","Mari Mustikas"]}
$ curl localhost:8080/api/projects/1
{"id":1,"name":"Intranet","members":["Kati Karu","Mari Mustikas"]}
The answer lists Jaan, because the Set in memory has him. The database does not: no insert was sent, because Project.members is the mappedBy side. The next request reads the database, and Jaan is gone.
The rule for every bidirectional relation: change the owning side, the one with @JoinColumn or @JoinTable, always. Change the other side too, to keep the objects consistent.