Nous avons actuellement un système Java EE où nous mappons à notre base de données en utilisant JPA. C'est un système assez bien développé avec environ 20 entités.
On nous a maintenant ordonné d'utiliser Views pour tout. Par exemple: si nous avons une table appelée PERMISSION alors nous avons également besoin d'une vue appelée PERMISSION_VIEW. Fondamentalement, nous devons le faire pour chaque table, et nos applications ne peuvent accéder aux données qu'en interrogeant la vue.
Maintenant, tous nos beans entité ressemblent à ceci:
@Entity
@Table(name = "PERMISSION")
@NamedQueries({
@NamedQuery(name = "Permission.findByPK", query = "SELECT p FROM Permission p WHERE p.dpNum = :dpNumber"),
@NamedQuery(name = "Permission.deleteAll", query = "DELETE FROM Permission") })
public class Permission implements Serializable {
}
Pour plus d'informations sur JPA et les vues de base de données, voir http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Views
Dans JPA, vous pouvez mapper vers un
VIEW
de la même manière qu'un tableau, en utilisant l'annotation @Table. Vous pouvez ensuite mapper chaque colonne de la vue avec les attributs de votre objet. Les vues sont normalement en lecture seule, donc le mappage des objets aux vues est normalement également en lecture seule. Dans la plupart des bases de données, les vues peuvent également être mises à jour en fonction de la complexité de la requête à encapsuler. Même pour les requêtes complexes, les déclencheurs de base de données peuvent normalement être utilisés pour se mettre à jour dans la vue.
La plupart des SGBDR modernes prennent en charge les vues insérables et modifiables. Si votre SGBDR le prend en charge, vous ne devriez avoir aucun problème. Une vue identique à une table doit pouvoir être mise à jour dans tout SGBDR prenant en charge de telles vues. Il vous suffit donc de modifier votre mappage et de remplacer les noms de table par les noms de vue.