2008-11-27 6 views
1

J'ai une entité qui mappe vers une table Oracle externe qui est l'une des principales sources de données de mon application. Cette entité est modélisée en utilisant Hibernate.Fonctions natives d'Hibernate et Oracle

La table oracle a maintenant une fonction complexe définie pour calculer certaines valeurs spéciales. J'ai besoin d'appeler cette fonction en quelque sorte - presque comme un autre accesseur sur l'entité.

Que suggérez-vous est le meilleur moyen d'incorporer cet appel de fonction afin que je puisse maintenir un accès hibernate relativement normal aux entités?

Répondre

1

J'ai une solution en utilisant l'annotation @Formula

0

Vous pouvez appeler la fonction directement en utilisant une procédure stockée avec HQL. À moins, bien sûr, que vous deviez appeler cette fonction pour chaque entrée dans le tableau. Mais si vous le faites dans la même session d'hibernation, tant que vous ne faites pas beaucoup d'appels en même temps, cela devrait fonctionner sans un impact significatif sur les performances.

+0

Je dois l'appeler pour chaque entrée de la table. Cette entité est traitée du début à la fin, donc il serait bon d'avoir un moyen de mettre l'appel de la fonction dans le cadre de la lecture naturelle. Le sql est quelque chose comme ceci: CHOISISSEZ FIELD1, FIELD2, FUNCTION (FIELD1) de DataTable – LenW

1

Afin de maintenir le découplage à partir de votre base de données, fournies par Hibernate, je compter sur Oracle pour activer cette fonction, en utilisant des déclencheurs ou des vues.

Le principal avantage de cette approche est qu'elle est totalement transparente pour votre implémentation Hibernate.

+0

comment le feriez-vous avec une fonction qui nécessite des paramètres? – LenW