2016-11-16 6 views
0

J'ai une application qui utilise Oracle DB. Pour les tests unitaires, j'utilise HSQLDB.L'entité Java ne peut pas être conservée dans le script créé table dans HSQLDB

J'ai créé table produit avec script dans HSQLDb de cette façon:

CREATE TABLE PRODUCT 
(
    ID INTEGER IDENTITY PRIMARY KEY, 
    NAME VARCHAR (73) 
); 

J'ai une entité:

@Entity 
@Table(name = "PRODUCT") 
public class Product implements Serializable { 
    @Id 
    @Column(name = "ID", nullable = false) 
    private int id; 

    @Column(name = "NAME") 
    private String name; 

    ... Getters, Setters... 
} 

Le problème est quand je suis en train de persister un produit (bien sûr après que j'ai créé la table) Je reçois cette erreur:

javax.persistence.RollbackException: Error while committing the transaction 
... 
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PRODUCT 
... 

Avez-vous une idée pourquoi le java e Ntity ne voit pas la table? Merci dans le conseil!

+0

javafan, consultez ma réponse, peut-être qu'il peut résoudre votre problème – BrunoDM

Répondre

0

La cause habituelle de ceci est l'URL de la base de données dans votre application n'est pas correcte. Vous créez la table dans une base de données, mais votre application pointe vers une autre base de données vide. Utilisez un chemin absolu ou un chemin basé sur le répertoire de base de l'utilisateur, ou un chemin de répertoire qui est une propriété système.

http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#dpc_variables_url

+0

Merci, mais je pense que le problème est autre chose, car je peux exécuter des sélections SQL à partir de l'application sur cette table de classe de test unitaire Java. – javafan

0

J'ai eu un problème similaire, et je résolus avec la commande suivante sur la première ligne dans le script:

create schema sce AUTHORIZATION DBA; 

Dans mon projet, les tables ont été crées par mise en veille prolongée, et la même erreur se produisait pendant la phase de création.