java h2 base de données en mémoire d'erreur: la Table ne trouve pas
J'ai essayé de googler autour, mais la solution à presque tous ce genre de questions est d'ajouter ;DB_CLOSE_DELAY=-1
, cependant il ne sert à rien pour moi.
Voici ma classe de test
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Main.class})
public class Testas {
@Autowired
@Qualifier("managerImplementation")
private ClassifierManager manager;
@Test
public void testManager(){
ClassifierGroupEntity cge = new ClassifierGroupEntity();
manager.saveClassifierGroup(cge);
}
}
Gestionnaire de classe
@Service("managerImplementation")
public class ClassifierManagerImpl implements ClassifierManager{
@Autowired
private ClassifierGroupEntityRepository groupEntityRepository;
@Autowired
private ClassifierEntityRepository entityRepository;
@Autowired
private ClassifierValueEntityRepository valueEntityRepository;
@Override
public ClassifierGroupEntity getClassifierGroup(long id) {
return groupEntityRepository.findOne(id);
}
@Override
public ClassifierGroupEntity getClassifierGroup(String code) {
return groupEntityRepository.findByCode(code);
}
@Override
public ClassifierGroupEntity saveClassifierGroup(ClassifierGroupEntity entity) {
return groupEntityRepository.save(entity);
}
@Override
public void deleteClassifierGroup(long id) {
groupEntityRepository.delete(id);
}
@Override
public ClassifierEntity getClassifier(long id) {
return entityRepository.findOne(id);
}
@Override
public ClassifierEntity getClassifier(String code) {
return entityRepository.findByCode(code);
}
@Override
public ClassifierEntity saveClassifier(ClassifierEntity entity) {
return entityRepository.save(entity);
}
@Override
public void deleteClassifier(long id) {
entityRepository.delete(id);
}
@Override
public ClassifierValueEntity getClassifierValue(long id) {
return valueEntityRepository.findOne(id);
}
@Override
public ClassifierValue getClassifierValue(String classifiedCode, String valueCode) {
return null;
}
@Override
public ClassifierValueEntity saveClassifierValue(ClassifierValueEntity entity) {
return valueEntityRepository.save(entity);
}
@Override
public void deleteClassifierValue(long id) {
valueEntityRepository.delete(id);
}
}
Et enfin les propriétés de fichier
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.user=sa
spring.datasource.password=
spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
Lancer le test me jette
org.h2.jdbc.JdbcSQLException: Table "CLASSIFIER_GROUP_ENTITY" not found; SQL statement:
insert into classifier_group_entity (id, code, modified_details, modified_time, modified_user_id, order, revision, valid_details, valid_from, valid_till, parent_id) values (null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [42102-191]
Je ne sais pas si je dois fournir quelque chose, s'il vous plaît dites-moi si je ne. Je vous remercie de votre aide à l'avance.
Cela signifie que votre H2 dans la mémoire de la base de données n'est pas initialisé. Si vous êtes en utilisant Hibernate vous pouvez utiliser <property name="hbm2ddl.auto" value="créer"/> pour les tests? Sinon, vous pourriez fournir à sql qui permettra de créer votre schéma.
Où avez-vous initialiser votre base de données? Où voulez-vous vous charger le SQL pour créer le schéma (et table)?
Je n'ai pas, je suppose? Je pense que le printemps jpa crée pour moi. Je veux dire, il a bien fonctionné pour moi la première fois que je le faisais (créer une interface qui étend CrudRepository, et puis il suffit de demander pour elle est mise en œuvre avec @Autocâblés). Désolé si cela semble stupide, je suis frais à tous ces trucs.
Quelque part dans votre hibernate configuration, vous devez activer la capacité à créer de schéma s'il est manquant. Dans mon hibernate.cfg.xml sous /hibernate-configuration/session-factory j'ai: <property name="hibernate.hbm2ddl.auto">créer</propriété> <property name="hbm2ddl.auto">mise à jour</propriété> Qui crée des tables tant que de besoin. J'utilise aussi @Table(name="...") sur mon entités de sorte qu'il sait ce que la table est nécessaire.
Où avez-vous initialiser votre base de données? Où voulez-vous vous charger le SQL pour créer le schéma (et table)?
Je n'ai pas, je suppose? Je pense que le printemps jpa crée pour moi. Je veux dire, il a bien fonctionné pour moi la première fois que je le faisais (créer une interface qui étend CrudRepository, et puis il suffit de demander pour elle est mise en œuvre avec @Autocâblés). Désolé si cela semble stupide, je suis frais à tous ces trucs.
Quelque part dans votre hibernate configuration, vous devez activer la capacité à créer de schéma s'il est manquant. Dans mon hibernate.cfg.xml sous /hibernate-configuration/session-factory j'ai: <property name="hibernate.hbm2ddl.auto">créer</propriété> <property name="hbm2ddl.auto">mise à jour</propriété> Qui crée des tables tant que de besoin. J'utilise aussi @Table(name="...") sur mon entités de sorte qu'il sait ce que la table est nécessaire.
OriginalL'auteur Coderino Javarino | 2016-04-15
Vous devez vous connecter pour publier un commentaire.
Après une demi-douzaine d'heures en bas de la vidange, j'ai enfin trouvé la solution, si quelqu'un trébuche sur le même problème.
Tableau n'a pas été trouvé, parce qu'il y avait une erreur au début lorsque vous essayez de créer. Et l'erreur était due au fait que l'un des ClassifierGroupEntity champs a été nommé "ordre", qui est l'un des mots réservés SQL, et donc l'instruction SQL générée par le Printemps était de syntaxe incorrecte.
Unlikely help others
Comment est de dire aux gens de vérifier les noms de champ peu probable pour aider les autres???Vous m'avez sauvé heures ... Merci
oh mon dieu, je suis content d'avoir trouvé votre réponse
OriginalL'auteur Coderino Javarino
Ont ces propriétés dans votre application.propriétés fichier dans le répertoire src/test/dossier de ressources:
printemps.jpa.générer-ddl=true
printemps.jpa.mise en veille prolongée.ddl-auto=créer
Ce doit être dépassé, car il n'est pas gardé créer gardé assez aucun ou valider après la première ddl création.
OriginalL'auteur Ankit Bhatnagar
Je l'ai obtenu après l'ajout de quelques colonnes de ma table. La persistance générateur de créer un peu plus de champs dans mon entité.
Je l'ai remarqué dans mes journaux.
Il s'avère que lors de mon IDE persistance du générateur mappé mon champ de TEXTE, il lui a donné une longueur de -1.
Retrait de la longueur de l'attribut résolu le problème pour moi.
OriginalL'auteur Omoloro
J'ai rencontré le même problème alors que j'étais à écrire des tests unitaires pour ma propre application. Après de nombreux essais, je n'ai pas pu obtenir mon application au cas de test en cours d'exécution. J'ai été en cours d'exécution sur la version 1.4.191 et puis j'ai mis à 1.4.196 et il a commencé à travailler.
OriginalL'auteur Shreyash
Dans mon cas, j'ai été idiot et j'ai oublié de mettre dans un printemps.source de données.url
Pour quelque raison JPA ne renvoie pas d'erreur si il ne peut pas trouver une base de données d'url. Bizarre
OriginalL'auteur NickV987