동일한 서비스 (트랜잭션) 내에서 동일한 엔티티를 병합 (업데이트) 한 후 해당 엔티티를 자식 (조인)으로 선택하려고합니다. 병합은 당신이 업데이트 한 객체를 반환한다는 것을 알고 있지만,이 객체는 데이터베이스의 데이터를 가진 모든 엔티티가 아닌 업데이트 된 데이터를 가지고 있습니다. 또한 병합 후 자식이 모두있는 엔터티를 가져 오려고 select를 실행하면 업데이트 된 데이터로만 업데이트 된 개체가 반환됩니다 (나머지 필드 및 자식 엔터티는 null 임).병합 후 선택 : 최대 절전 모드
문제를 해결할 방법이 있습니까? 커밋 전에 올바르게 실행되어야하는 많은 데이터베이스 작업이 서비스에 있기 때문에 동일한 트랜잭션에서 모든 것을 실행해야합니다.
감사합니다. 감사합니다.
코드를 보여주십시오. 병합에 의해 반환 된 엔티티는 데이터베이스에 IS가 포함되어 있거나 최소한 세션이 플러시 된 후에 데이터베이스에 포함될 첨부 엔티티입니다. 나머지 필드가 null 인 경우 세션이 플러시되면 데이터베이스에서 null이됨을 의미하므로 큰 문제가 있음을 의미합니다. –
맞습니다만 엔티티의 한 필드 만 업데이트하려고합니다. 그래서이 필드로 엔티티 개체를 만들고 나머지는 null입니다. 그래서 당신의 대답을 이해할 수있는, 나는 모든 필드를 엔티티를 구축해야 ... 내가 업데이 트하려는 필드를 업데이 트하는 방법이 아닌가요? – user1260893
그런 다음 세션에서 엔티티를 가져 와서 필드를 설정합니다.'Foo f = session.get (Foo.class, id); System.out.println ("done"); ' –