@Adrenal1ne1

Почему не инициализируется репозиторий JPA?

Добрый день!
Пробую связку kotlin - spring boot 2 - jpa
Набросал простенькую програмку, но при запуске получаю ошибку при инициализации репозитория JPA. Что сделал не правильно ? Помогите исправить ошибку ?
Спрингбутом до этого не пользовался, хочу освоить его. Вебом пользоваться в этой проге не собираюсь, с вебом пересмотрел много примеров, но ответ на свой вопрос не нашел.
2018-12-21 13:26:02.732  INFO 28188 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL95Dialect
2018-12-21 13:26:02.923  INFO 28188 --- [           main] o.h.e.j.e.i.LobCreatorBuilderImpl        : HHH000421: Disabling contextual LOB creation as hibernate.jdbc.lob.non_contextual_creation is true
2018-12-21 13:26:02.929  INFO 28188 --- [           main] org.hibernate.type.BasicTypeRegistry     : HHH000270: Type registration [java.util.UUID] overrides previous : org.hibernate.type.UUIDBinaryType@396ef8b2
2018-12-21 13:26:03.335  INFO 28188 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2018-12-21 13:26:04.150  INFO 28188 --- [           main] r.k.v.VkUsersSkillApplicationKt          : Started VkUsersSkillApplicationKt in 4.348 seconds (JVM running for 4.905)
Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property vkUserRepository has not been initialized
	at ru.program.vkUsersSkill.VkUsersSkillApplicationKt.main(VkUsersSkillApplication.kt:17)

Программа:

VkUser.kt
import javax.persistence.Column
import javax.persistence.Entity
import javax.persistence.Id
import javax.persistence.Table

@Entity
@Table (name = "vk_users")
data class VkUser(
    @Id
    @Column(name = "user_id")
    var userId: Long = 0L,

    @Column(name = "access_token")
    var accessToken: String = "",

    @Column(name = "alias")
    var alias: String = "",

    @Column(name = "login")
    var login: String = "",

    @Column(name = "password")
    var password: String = ""
)


VkUserRepository.kt
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository
import ru.program.vkUsersSkill.models.VkUser

@Repository
interface VkUserRepository: JpaRepository<VkUser, Long>


VkUsersSkillApplication.kt
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import ru.program.vkUsersSkill.repositories.VkUserRepository

@Autowired
lateinit var vkUserRepository: VkUserRepository

@SpringBootApplication
class VkUsersSkillApplication

fun main(args: Array<String>) {
	runApplication<VkUsersSkillApplication>(*args)
	vkUserRepository.findAll()
}
  • Вопрос задан
  • 414 просмотров
Решения вопроса 1
@Adrenal1ne1 Автор вопроса
Создаём стартовый бин, в котором всё будем запускать.

@Component
class StartHere {
@Autowired
lateinit var vkUserRepository: VkUserRepository
fun runHere() {
var users = vkUserRepository.findAll()
println(users)
}

//TODO здесь пишем нужный нам код
}
Затем получаем 'application context' в переменную и затем получаем наш стартовый бин и запускаем его содержимое функцией runHere.

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import ru.program.vkUsersSkill.init.StartHere

@SpringBootApplication
class VkUsersSkillApplication

fun main(args: Array) {
val context = runApplication(*args)
val start = context.getBean(StartHere::class.java)
start.runHere()
}
Теперь всё запускается без проблем и с помощью Spring-Jpa получаем данные из базы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы