Tôi đã từng gặp vấn đề tương tự. Có vẻ như việc truy cập bản đồ bằng ref (không có VALUE ()) đã cung cấp cho bạn một giá trị mục nhập bản đồ, tức là JPQL tiếp theo sẽ được chuyển đổi thành SQL hợp lệ:
select r from Relation r join r.langMap m where ( KEY(m) = :locale and m = :value )