} (VO du domaine) en JSON stocké en
+ * colonne TEXT, et inversement.
+ *
+ * Même approche que {@code PrerequisiteListJsonConverter} : conversion manuelle
+ * map ↔ record pour garder le domaine pur (zéro annotation Jackson) et un format
+ * on-disk stable, indépendant des noms de classes Java.
+ *
+ * Format JSON :
+ * [ {"nodeType": "CHAPTER", "nodeId": "42", "order": 0}, ... ]
+ */
+@Converter
+public class QuestNodeListJsonConverter implements AttributeConverter, String> {
+
+ private static final ObjectMapper MAPPER = new ObjectMapper();
+
+ @Override
+ public String convertToDatabaseColumn(List attribute) {
+ if (attribute == null || attribute.isEmpty()) return "[]";
+ try {
+ List