J'essaie d'enregistrer un objet avec les données de printemps JPA. Malheureusement, je reçois toujours une nullpointeexception, et je ne comprends pas pourquoi.
J'ai suivi ce tutoriel: https://www.callicoder.com/spring-boot-jpa-ibernate-postgresql-Restful-crud-api-example/ P>
Je n'ai pas besoin d'une API crud, alors j'ai laissé de côté les choses qui appartiennent. p>
i Obtenir l'erreur suivante: P>
java.lang.nullpointException p>
à com.niclas.elitedangerseapi.handler.systempopulousHandler.insertintodb à com.hniclas.elitedangerseapi.main.main.main (Main.java:19) [Main] Erreur C.N.E.H.SystempopoxuldHandler - NULL P> blockQuote>
update strong> p>
Je veux remplir ma base de données, mais quand je veux. À la fin, cela devrait être de sorte que chaque nuit un fichier soit téléchargé, puis stocké dans la base de données. Plus tard, je veux rendre les données accessibles via une API.Je veux exécuter cette méthode (SystemPopOplulollyHandler.insertinodb ()) au début et à toutes les heures x. P>
SystemPopulations.class P>
@SpringBootApplication @EnableJpaRepositories public class Main { public static void main( String[] args ) { SpringApplication.run( Main.class, args ); SystemPopulatedHandler systemPopulatedHandler = new SystemPopulatedHandler(); systemPopulatedHandler.insertIntoDB(); } }
4 Réponses :
Le problème est que vous créez de cette façon de ressort ne pas injecter le référentiel dans votre classe car cela ne fonctionne que si le printemps crée la Classe. P> Mais si vous souhaitez peupler une base de données au démarrage (au moins, il semble que vous essayiez de le faire), vous devriez vérifier la voie à la mouton (ou 85,5 dans cette documentation: https://docs.spring.io/spring-boot/docs /Current/reeference/html/howto-database-initialization.html ) p> Si vous ne pouvez pas utiliser de voie aérienne pour une raison quelconque, vous pouvez ajouter le code suivant à la classe principale: P > ajoutez le constructeur à la catégorie p> p> et retirez le Mise à jour forte> p> Vous devez également ajouter les annotations manquantes comme mentionné par cette réponse: update 2 strong> < / p> Si vous souhaitez effectuer cette action périodiquement, vous pouvez utiliser la planification (comme dans ce guide https://spring.io/guides/gs/scheduling-tasks/ )
En fait, c'est assez facile: p> Ne faites pas les modifications que j'ai mentionnées ci-dessus, à l'exception de l'ajout des annotations manquantes et faites simplement ce qui suit: p> Ajouter Ajouter pour SystemPopOuDrandler code> avec
@ Auto-attendu code> Annotation. P>
@Component code> à
SystemPopOuduLHandler CODE> P>
@schedulled code> à
insertionItoDB () Code> Dans
Systempopulatharler CODE> P> < p> et ajoutez
@enablesCHEDULING code> à la classe principale p>
@scheduled code> Il suffit de lire le guide, il décrit ce que vous pouvez faire avec l'annotation. p> p>
Merci pour votre réponse. Oui, je veux remplir ma base de données, mais alors quand je veux. À la fin, cela devrait être de sorte que chaque nuit un fichier soit téléchargé, puis stocké dans la base de données. Plus tard, je souhaite rendre les données accessibles via une API.Il cela est possible du tout parce que je souhaite remplir la base de données au début de l'application, puis à certains intervalles (tous les soirs). Je dois donc exécuter cette méthode au début et toutes les x heures.
@Stitzle J'ai ajouté une mise à jour pour répondre à votre exigence mentionnée
Merci beaucoup qui m'a beaucoup aidé.
Ceci est dû au référentiel que vous avez câblé automatique n'est pas le câblage du haricot. p>
Veuillez annoncer votre référentiel avec @RePository Et dans la classe principale, spécifiez @ENABLYJPETORPOSITORY. p>
Voir les documents JPA de données de printemps pour plus de détails p>
Merci pour votre réponse, mais cela ne pouvait pas résoudre mon problème.
Mais tu as raison. J'ai oublié les annotations.Je les a ajoutés au code source.
Le problème est que vous instanciez la bean SystemPopOplollarler sans utiliser ApplicationContext ou BeansFactory, il n'est donc pas maintenu par le conteneur de COI.
Utiliser DI dans une application Springboot Tout ce dont vous avez besoin est de simplement System SystemPopulatoTlerdler dans votre contrôleur ou service, puis vous pouvez appeler la méthode insertintoDb (). p>
puisque vous utilisez un démarrage à ressort et l'exemple est si simple que vous n'avez pas besoin de configuration séparée pour les haricots. P>
@Controller public class SystemPopulatedController { @Autowired private SystemPopulatedHandler systemPopulatedHandler; @RequestMapping("/") public void insertIntoDB() { systemPopulatedHandler.insertIntoDB(); } }
Merci beaucoup à vous tous. J'ai résolu le problème comme suit:
SystempopuloundRepository.class P> "'' p> Main.class p>
Est-ce la même chose que référentiel de printemps NullpointException