Home > Enterprise >  Spring Data JDBC - Could not safely identify store assignment for repository candidate
Spring Data JDBC - Could not safely identify store assignment for repository candidate

Time:07-13

I made a few changes to a commit, and all of a sudden, my spring program can't seem to initialize entities and link them to repositories. When I start up spring, I get this as my log:

2022-07-10 16:39:17.137  INFO 18040 --- [  restartedMain] com.vendify.BackendDbApplication         : Starting BackendDbApplication using Java 17.0.2 on DESKTOP-HSDNP64 with PID 18040 (applicaiton started by (my name) in directory)
2022-07-10 16:39:17.140  INFO 18040 --- [  restartedMain] com.vendify.BackendDbApplication         : No active profile set, falling back to default profiles: default
2022-07-10 16:39:17.186  INFO 18040 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2022-07-10 16:39:17.187  INFO 18040 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2022-07-10 16:39:18.193  INFO 18040 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2022-07-10 16:39:18.194  INFO 18040 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JDBC repositories in DEFAULT mode.
2022-07-10 16:39:18.240  INFO 18040 --- [  restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.Auth0TokensCacheRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.242  INFO 18040 --- [  restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.ItemIndexRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.244  INFO 18040 --- [  restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.ItemsRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.246  INFO 18040 --- [  restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.LoggingRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.248  INFO 18040 --- [  restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.SerialsRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.251  INFO 18040 --- [  restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.TransactionsRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.253  INFO 18040 --- [  restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.ValidUsersRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.255  INFO 18040 --- [  restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.VendorsRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.
2022-07-10 16:39:18.256  INFO 18040 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 58 ms. Found 0 JDBC repository interfaces.
2022-07-10 16:39:18.266  INFO 18040 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2022-07-10 16:39:18.267  INFO 18040 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2022-07-10 16:39:18.329  INFO 18040 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 51 ms. Found 8 JPA repository interfaces.
2022-07-10 16:39:19.172  INFO 18040 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
2022-07-10 16:39:19.184  INFO 18040 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-07-10 16:39:19.184  INFO 18040 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.52]
2022-07-10 16:39:19.275  INFO 18040 --- [  restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-07-10 16:39:19.276  INFO 18040 --- [  restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2089 ms
2022-07-10 16:39:19.754  INFO 18040 --- [  restartedMain] o.f.c.internal.license.VersionPrinter    : Flyway Community Edition 7.7.3 by Redgate
2022-07-10 16:39:19.760  INFO 18040 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-07-10 16:39:20.192  INFO 18040 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2022-07-10 16:39:20.240  INFO 18040 --- [  restartedMain] o.f.c.i.database.base.DatabaseType       : Database: jdbc:mysql://localhost:3306/vendify (MySQL 8.0)
2022-07-10 16:39:20.276  INFO 18040 --- [  restartedMain] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.015s)
2022-07-10 16:39:20.284  INFO 18040 --- [  restartedMain] o.f.core.internal.command.DbMigrate      : Current version of schema `vendify`: 1
2022-07-10 16:39:20.285  INFO 18040 --- [  restartedMain] o.f.core.internal.command.DbMigrate      : Schema `vendify` is up to date. No migration necessary.
2022-07-10 16:39:20.502  INFO 18040 --- [  restartedMain] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2022-07-10 16:39:20.564  INFO 18040 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.32.Final
2022-07-10 16:39:20.705  INFO 18040 --- [  restartedMain] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2022-07-10 16:39:20.866  INFO 18040 --- [  restartedMain] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
2022-07-10 16:39:21.555  INFO 18040 --- [  restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2022-07-10 16:39:21.563  INFO 18040 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2022-07-10 16:39:22.307  WARN 18040 --- [  restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2022-07-10 16:39:22.779  INFO 18040 --- [  restartedMain] o.s.s.web.DefaultSecurityFilterChain     : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@6c38469b, org.springframework.security.web.context.SecurityContextPersistenceFilter@52d983cb, org.springframework.security.web.header.HeaderWriterFilter@67a31d2b, org.springframework.security.web.authentication.logout.LogoutFilter@2c8dea82, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@631bab6, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1f96917a, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@64458fc6, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@46d290b3, org.springframework.security.web.session.SessionManagementFilter@1312d3d0, org.springframework.security.web.access.ExceptionTranslationFilter@37e85798, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@2cc95e93]
2022-07-10 16:39:23.986  INFO 18040 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2022-07-10 16:39:23.995  INFO 18040 --- [  restartedMain] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 14 endpoint(s) beneath base path '/****{hidden for security}'
2022-07-10 16:39:24.057  INFO 18040 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
2022-07-10 16:39:24.073  INFO 18040 --- [  restartedMain] com.vendify.BackendDbApplication         : Started BackendDbApplication in 7.398 seconds (JVM running for 7.938)

Mainly, the errors I am concerned about are like this in the log:

2022-07-10 16:39:18.240  INFO 18040 --- [  restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data JDBC - Could not safely identify store assignment for repository candidate interface com.vendify.Repositories.Auth0TokensCacheRepository. If you want this repository to be a JDBC repository, consider annotating your entities with one of these annotations: org.springframework.data.relational.core.mapping.Table.

this is an example of how I code my entity classes (All of the are like this, and I have not touched them for quite a while. They seemed to have worked before...)

package com.vendify.Entities;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.springframework.lang.NonNull;

import lombok.Getter;
import lombok.Setter;

@Entity
@Table(name = "Logging")
@Getter
@Setter
public class LoggingEntity {

//specific code removed for security

}

with a similar repository class like this:

package com.vendify.Repositories;

import java.util.Date;
import java.util.List;

import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

import com.vendify.Entities.Auth0TokensCacheEntity;

@RepositoryRestResource(exported = false)
public interface Auth0TokensCacheRepository extends CrudRepository<Auth0TokensCacheEntity, String> {

}

Just as proof, my MySQL database structure tables look a bit like this: enter image description here

Spring seems able to connect to the database, and for the longest time, it had no issues... I've added a few packages, and it messed with some other stuff and it seems like that is when it broke, so for some context, here is how my program is generally laid out:

enter image description here

Help would be greatly appreciated! Thank you so much and good luck with your project fellow devs!

Update: I tried the solution of replacing CRUDRepository with JPARepository and the other annotations like Dhana suggested (Thanks :)), and spring found all those repositories. however, all my API endpoints now result in no response, even the actuator endpoints. Also when adding @ComponentScan(basePackageClasses = {my controller classes}) I get an application error that spring cannot find the service classes. Please note, as of now, when I call an endpoint the function still runs properly (It can system.out.print the result properly, but for some reason, cannot return it properly to the webserver to be displayed.

Description:

Field auth0TokensCacheService in com.vendify.Controllers.{ControllerClass} required a bean of type 'com.vendify.Services.{ControllerClass}' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'com.vendify.Services.{ControllerClass}' in your configuration.

My Service class looks like this:

    @Service
public class HiddenService {
    @Autowired
    HiddenRepository hiddenRepository;
//methods in here
}

And my Controller looks like this:

@RestController
public class HiddenController {

@GetMapping("/endpointURL")
//method here

} 

Thanks!

CodePudding user response:

Let me explain, from my understanding, when you have multiple spring-data modules within a project alongside Spring Data JDBC, if you try to create an interface for a specific entity that isn't annotated with specific persistence annotations by extending the interface from common modules. This will definitely not work because spring basically has no idea with which data storage your entity is associated. So, try to extend it to a specific repository like, if you are using MySQL, go for JpaRepository instead of CrudRepository, anyhow internally at one point of the hierarchy they'll be inter-linked still associating your entity with specific repository is advised

finally, make sure you add these to your respective files:

  1. @Repository inside your custom repo

  2. Add this to your application.properties

spring.data.jdbc.repositories.enabled=false

Hope it helps you!:)

  • Related