Travail sur le projet Spring Data + JPA + Hibernate + Maven.Oracle Table a été supprimé par Hibernate; retourné à DB de la corbeille. Erreur d'obtention "Erreur SQL: 942, SQLState: 42000"
Séquence d'événements:
J'ai eu un code de travail en utilisant ce qui précède qui a utilisé pour interroger la table à l'aide
Favorites
JPARespository
. J'ai ajouté une ligneprops.put("hibernate.hbm2ddl.auto");
aux propriétés JPA et la liste Favoris est supprimée. Panique pure!properties.put ("hibernate.hbm2ddl.auto", environnement.getRequiredProperty ("hibernate.hbm2ddl.auto"));
Je commente le code qui a causé le problème. Je demande au DBA de recréer la table et elle dit que c'était dans la poubelle et elle l'a "flashée".
private Map jpaProperties() { Map<String,Object> properties = new HashMap<String,Object>(); properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect")); // properties.put("hibernate.hbm2ddl.auto", // environment.getRequiredProperty("hibernate.hbm2ddl.auto")); properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql")); properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql")); return properties; }
méthode de configuration de base de données:
`@Primary
@Bean(name = "dataSource")
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment
.getRequiredProperty("rg.jdbc.driverClassName"));
dataSource.setUrl(environment.getRequiredProperty("rg.jdbc.url"));
dataSource.setUsername(environment
.getRequiredProperty("rg.jdbc.username"));
dataSource.setPassword(environment
.getRequiredProperty("rg.jdbc.password"));
return dataSource;
}`
- Je peux voir le tableau dans SQL Developer en utilisant les mêmes informations d'identification utilisateur utilisé dans le code . Toutefois, si j'interroge la base de données à l'aide de la classe étendue
JPARepository
à l'aide defindAll()
.
Je reçois l'erreur suivante. Je peux voir la Table dans la DB, mais pas via le code Java.
Quelqu'un peut-il m'aider à comprendre ce que fait la propriété ci-dessus et pourquoi je ne peux pas voir la table via le code, mais peut le voir dans SQL Developer? Aussi, comment puis-je résoudre ce problème?
Hibernate:
select
favorite0_.FAVORITE_ID as FAVORITE_ID1_1_,
favorite0_.category as category2_1_,
favorite0_.created as created3_1_,
favorite0_.CREATED_BY as CREATED_BY4_1_,
favorite0_.description as description5_1_,
favorite0_.name as name6_1_,
favorite0_.OBJECT_TYPE_ID as OBJECT_TYPE_ID7_1_
from
FAVORITES favorite0_
2017-09-22 02:21:20 [http-bio-8080-exec-2] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 942, SQLState: 42000
2017-09-22 02:21:20 [http-bio-8080-exec-2] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ORA-00942: table or view does not exist
Sep 22, 2017 1:24:11 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/RG-NG] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause
java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1017)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:58)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:776)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:897)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1034)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3820)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3867)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1502)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2117)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1900)
'props.put ("hibernate.hbm2ddl.autopdate")' est pas correct, s'il vous plaît poster le code réel. Pour un 'put' attend deux paramètres, et la propriété serait' hibernate.hbm2ddl.auto'. –
utilisez-vous le même utilisateur Oracle pour le code et les connexions développeur SQL? – Zeromus
@MarkRotteveel vous avez raison. J'ai mis à jour l'extrait de code. properties.put ("hibernate.hbm2ddl.auto", environnement.getRequiredProperty ("hibernate.hbm2ddl.auto")); –