Bonjour,

J'ai besoin de créer une vue dans mon application. Après plusieurs mauvaises pistes, j'ai trouvé qu'il était possible de créer une vue gràce à la balise <database-object>.

Pourtant cette technique n'a pas l'air de fonctionner car je ne vois pas ma vue créée. Dans un premier temps j'avais essayé de mettre le SQL directement dans un fichier de mapping et ensuite, j'ai fait une classe qui implémente AuxiliaryDatabaseObject. A chaque fois, le mapping fonctionne bien mais ma vue n'est jamais créée. (j'ai oublié de préciser, nous créons le schéma de la base avec hibernate).

Est ce que vous avez une piste ?

Voici le mapping que j'ai mis en place :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
<hibernate-mapping>
	<database-object>
		<definition class="com.applimetier.model.MaJolieVue"/>
		<dialect-scope name='org.hibernate.dialect.MySQL5InnoDBDialect' />
	</database-object>
</hibernate-mapping>
et voici le contenu de ma classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
public class MaJolieVue implements AuxiliaryDatabaseObject {
 
    @Override
    public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema)
            throws HibernateException {
        StringBuilder requete = new StringBuilder();
        requete.append("create or replace view maJolieVue as select * from trucMuche");
         return requete.toString();
    }
 
    @Override
    public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) {
        return "";
    }
 
    @Override
    public void addDialectScope(String dialectName) {
        System.out.println(dialectName);
 
    }
 
    @Override
    public boolean appliesToDialect(Dialect dialect) {
        return true;
    }
 
}
Dans les questions de base que je me suis posé :
- j'ai bien mis la référence de mon fichier dans mon fichier de conf hibernate.cfg.xml
- J'ai mis un point d'arrêt en début de chaque méthode de la classe, je ne passe que dans la méthode addDialectScope. Les méthodes sqlCreateString et sqlDropString ne sont jamais appelées

Je pencherais bien pour un problème de configuration d'hibernate, mais je n'ai rien réussi à trouver sur internet.

Merci d'avance pour vos réponses !