J'ai dû le faire une fois... texte multilingue pour certaines tables... Je ne sais pas si j'ai trouvé la meilleure solution mais ce que j'ai fait, c'est avoir la table avec les informations indépendantes de la langue, puis une table enfant avec toutes les champs multilingues. Au moins un enregistrement était requis dans la table enfant, pour la langue par défaut ; d'autres langues pourraient être ajoutées ultérieurement.
Sur Hibernate, vous pouvez mapper les informations des tables enfants sous forme de carte et obtenir les informations pour la langue souhaitée, en implémentant le repli sur votre POJO comme vous l'avez dit. Vous pouvez avoir différents getters pour les champs multilingues, qui appellent en interne la méthode de secours pour obtenir l'objet enfant approprié pour la langue requise, puis renvoient simplement le champ requis.
Cette approche utilise plus de table (une table supplémentaire pour chaque table nécessitant des informations multilingues) mais les performances sont bien meilleures, ainsi que la maintenance je pense...