Khi mình sửa dữ liệu và save xuống DB, mình đang mong muốn ở trong EntityListener mình có thể detect được mình vừa sửa trường nào.
AE cho mình hỏi liệu có cách nào làm đơn giản mà không cần phải override can thiệp quá sâu vào hibernate không?
Khi mình sửa dữ liệu và save xuống DB, mình đang mong muốn ở trong EntityListener mình có thể detect được mình vừa sửa trường nào.
AE cho mình hỏi liệu có cách nào làm đơn giản mà không cần phải override can thiệp quá sâu vào hibernate không?
<span>import</span> java.util.HashSet; <span>import</span> java.util.<span>Map</span>; <span>import</span> java.util.Objects; <span>import</span> java.util.<span>Set</span>; <span>import</span> com.fasterxml.jackson.core.type.TypeReference; <span>import</span> com.fasterxml.jackson.databind.ObjectMapper; <span>import</span> lombok.AllArgsConstructor; <span>@AllArgsConstructor</span> public <span><span>class</span> <span>ChangedObjectDetector</span> </span>{ private <span>final</span> ObjectMapper objectMapper; public <span>Set</span><<span>String</span>> getChangedFields(<span>Object</span> original, <span>Object</span> updated) { <span>Map</span><<span>String</span>, <span>Object</span>> originalMap = objectMapper.convertValue( original, <span>new</span> TypeReference<>() {} ); <span>Map</span><<span>String</span>, <span>Object</span>> updatedMap = objectMapper.convertValue( updated, <span>new</span> TypeReference<>() {} ); <span>Set</span><<span>String</span>> changedFields = <span>new</span> HashSet<>(); <span>for</span> (<span>String</span> key : originalMap.keySet()) { <span>Object</span> originalValue = originalMap.<span>get</span>(key); <span>Object</span> updatedValue = updatedMap.<span>get</span>(key); <span>if</span> (!Objects.equals(originalValue, updatedValue)) { changedFields.add(key); } } <span>return</span> changedFields; } }
Sẽ đơn giản hơn rất nhiều.