2017-07-25 2 views
0

Selon la configuration, référentiel Hibernate DAO doit envoyer la requête comme ceci:Hibernate ne comprend pas le schéma dans la requête

INSERT INTO some_schema.some_table (...) VALUES (...) 

Au lieu de cela, Hibernate envoie ceci:

INSERT INTO some_table (...) VALUES (...) 

Il omet le préfixe de schéma. Sans ce préfixe, je reçois ORA-00942, la table n'existe pas Erreur de base de données Oracle. Comment forcer Hibernate à envoyer un préfixe de schéma?

P.S. Cette question est similaire à this question, mais l'ajout de schéma par défaut ne fonctionne pas pour moi, car j'en utilise plus.

Configuration de l'entité est comme ceci:

<hibernate-mapping> 
<class name="com.somepackage.SomeClass" table="some_table" schema="some_schema"> 
    <id name="someID" type="int" column="SOME_TABLE_ID"> 
    <generator class="increment"/> 
    </id> 
    <property name="someProp" column="SOME_PROP" type="string"/> 
</class> 
</hibernate-mapping> 

config Mise en veille prolongée:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

<!-- Oracle data source definition --> 
<bean id="oracleDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName"><value>${oracle.database.driverClassName}</value></property> 
    <property name="url"><value>${oracle.database.url}</value></property> 
    <property name="username"><value>${oracle.database.username}</value></property> 
    <property name="password"><value>${oracle.database.password}</value></property> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="oracleDataSource" /> 
    <property name="mappingResources"> 
     <list> 
      <value>some-table.cfg.xml</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.current_session_context_class">thread</prop> 
     </props> 
    </property> 
</bean> 

+0

S'il vous plaît montrer votre fichier de configuration de mise en veille prolongée –

+0

@SatishPahuja voici la config de mise en veille prolongée. – milosdju

Répondre

1

Ajouter le ci-dessous dans les propriétés de mise en veille prolongée. Il devrait être automatiquement choisi. J'ai la même et il fonctionne

<property name="hibernate.default_schema" value="myschema"/> 
+0

Également trouvé le lien ci-dessous qui se réfère à la même question https://stackoverflow.com/questions/2737420/how-to-set-up-default-schema-name-in-jpa-configuration – user8271644

+0

Merci pour la réponse! Mais je ne devrais pas définir default_schema car l'application utilisera dans un moment plus de schémas. – milosdju

+0

N'a pas d'expérience avec cela, mais a fait quelques recherches et est venu avec le lien ci-dessous, voir si cela vous aide https://stackoverflow.com/questions/398215/how-can-i-set-the-schema-name-used -by-hibernate-entities-at-query-temps – user8271644