IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Exécution de Procédures Stockées sous Oracle depuis Java


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 89
    Points
    89
    Par défaut Exécution de Procédures Stockées sous Oracle depuis Java
    Bonjour à tous,

    J'essaye actuellement d'exécuter des procédures ou des functions stockées sous oracle depuis un programme Java en utilisant les annotations liées à Oracle.

    Voici mon fichier de persistance:
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                                     http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
        <persistence-unit name="mnf-pu" transaction-type="RESOURCE_LOCAL">
        	<properties>
                <!-- Configuring JDBC properties -->
                <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@strldevebdb:1529/DSEB01" />
    			<property name="javax.persistence.jdbc.user" value="STREAMLINE_HRMATEP" />
    			<property name="javax.persistence.jdbc.password" value="lkmds984!" />
    			<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver" />
     
     
                <!-- Hibernate properties -->
                <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
                <property name="hibernate.synonyms" value="true"/>
    			<property name="hibernate.show_sql" value="true" />
    			<property name="hibernate.connection.shutdown" value="true" />
     
            </properties>
        </persistence-unit>
    </persistence>
    Voici l'entity:
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    package com.memorynotfound.hibernate;
     
    import javax.persistence.Column;
    import javax.persistence.Embeddable;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
     
    import org.eclipse.persistence.annotations.Struct;
    import org.eclipse.persistence.platform.database.oracle.annotations.NamedPLSQLStoredFunctionQuery;
    import org.eclipse.persistence.platform.database.oracle.annotations.PLSQLParameter;
    import org.eclipse.persistence.platform.database.oracle.annotations.PLSQLRecord;
     
    	@NamedPLSQLStoredFunctionQuery(
                    name = "getCopyOfBook",
                    functionName = "MYPACKAGE.GET_BOOK",
                    returnParameter = @PLSQLParameter(
                    		name="RESULT", databaseType="MYPACKAGE.BOOK_REC"))
        @Embeddable
                    @Struct(
                    		name = "BOOK_TYPE", 
                    		fields={"ID", "TITLE"})
                    @PLSQLRecord(
                    		name = "MYPACKAGE.BOOK_REC", 
                    		compatibleType = "BOOK_TYPE", 
                    		javaType = CopyOfBook.class,
                    		fields = {
                    			@PLSQLParameter(
                    					name="ID", 
                    					databaseType="NUMERIC_TYPE"), 
                    			@PLSQLParameter(
                    					name="TITLE")
                    		}
                    )
     
     
    public class CopyOfBook {
     
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="ID")
        private Integer id;
        @Column(name="TITLE")
        private String title;
     
        public CopyOfBook() {
        }
     
        public CopyOfBook(String title) {
            this.title = title;
        }
     
        public Integer getId() {
            return id;
        }
     
        public void setId(Integer id) {
            this.id = id;
        }
     
        public String getTitle() {
            return title;
        }
     
        public void setTitle(String title) {
            this.title = title;
        }
     
        @Override
        public String toString() {
            return "Book{" +
                    "id=" + id +
                    ", title='" + title + '\'' +
                    '}';
        }
    }
    Voici le fichier de test CopyOfApp :

    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
     
    package com.memorynotfound.hibernate;
     
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;
    import javax.persistence.Query;
     
    public class CopyOfApp {
     
        public static void main (String...args) throws InterruptedException {
     
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("mnf-pu");
            EntityManager em = emf.createEntityManager();
     
            Query query = em.createNamedQuery("getCopyOfBook");
            CopyOfBook result = (CopyOfBook)query.getSingleResult();
     
            System.out.println(result.getTitle());
     
            em.close();
            emf.close();
        }
    }

    Et éventuellement le pom

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                                 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.memorynotfound.db.hibernate</groupId>
        <artifactId>named-stored-procedure</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <packaging>war</packaging>
        <name>HIBERNATE - ${project.artifactId}</name>
        <url>http://memorynotfound.com</url>
     
        <properties>
            <mysql.driver.version>5.1.9</mysql.driver.version>
            <hibernate.version>4.3.1.Final</hibernate.version>
        </properties>
     
        <dependencies>
            <!-- dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.driver.version}</version>
            </dependency-->
     
            <dependency>
    			<groupId>oracle.jdbc</groupId>
    			<artifactId>ojdbc6</artifactId>
    			<version>11.2.0.4.0</version>
    		</dependency>
     
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
    		<dependency>
        		<groupId>org.glassfish.extras</groupId>
        		<artifactId>glassfish-embedded-web</artifactId>
        		<version>3.1.1-b11</version>
    		</dependency>
        </dependencies>
     
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
     
    </project>
    Lors de l'exécution de CopyOfApp j'obtiens l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Feb 27, 2017 2:57:48 PM org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA
    INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
    Exception in thread "main" java.lang.IllegalArgumentException: No query defined for that name [getCopyOfBook]
    	at org.hibernate.jpa.spi.AbstractEntityManagerImpl.buildQueryFromName(AbstractEntityManagerImpl.java:788)
    	at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createNamedQuery(AbstractEntityManagerImpl.java:767)
    	at com.memorynotfound.hibernate.CopyOfApp.main(CopyOfApp.java:15)
    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    @NamedPLSQLStoredFunctionQuery est une annotation spécifique à EclipseLink : peu de chance que cela fonctionne avec Hibernate…



Discussions similaires

  1. Exécuter une procédure stockée sous SQL*Plus
    Par awalter1 dans le forum PL/SQL
    Réponses: 7
    Dernier message: 02/10/2012, 11h01
  2. Réponses: 11
    Dernier message: 27/07/2012, 09h37
  3. Exécuter une procédure stockée PL/SQL Oracle sous Talend
    Par robinson50 dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 03/11/2008, 10h51
  4. Creer un procédure Stocké sous oracle
    Par ouadie99 dans le forum C#
    Réponses: 2
    Dernier message: 27/05/2008, 18h35
  5. [ADO]Exécuter une procédure stockée Oracle
    Par randriano dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 21/04/2008, 12h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo