Я хочу через некоторое время прочитать значение базы данных (lastLocationDate) l oop, используя Kotlin, Spring Data и Hibernate . Проблема в том, что когда я изменяю значение в базе данных, this.productDao.findBySerialNumber ("11223344") не обновляет sh значение в l oop. Мне нужно перезапустить службу, чтобы получить новое значение базы данных. Вот реализация:
TestServiceImpl
@Service
internal open class TestServiceImpl(private val productDao: ProductDao) : TestService {
@Throws(TestException::class)
override fun testProduct() {
var count = 0
while ( count < 36 ) {
val product = this.productDao.findBySerialNumberAndIdProductType("W33DDA", 1L)
val lastLocationDate = product?.lastLocationDate
println("lastLocationDate = $lastLocationDate")
Thread.sleep(5000L)
count += 1
}
}
}
TestService
interface TestService {
fun testProduct()
}
TestController
@RestController
@RequestMapping("/rest/v1")
class TestController(private val testService: TestService) {
@GetMapping("/test", consumes = [MediaType.APPLICATION_JSON_VALUE])
fun testProduct() {
this.testService.testProduct()
}
}
ProductDao
interface ProductDao : JpaRepository<Product, Long> {
fun findBySerialNumber(serialNumber: String): Product?
}
Продукт
@Entity
@Table(name = "Product")
class Product(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(precision = PRECISION_ID)
var idProduct: Long? = null,
@Column(name = "serialNumber", nullable = false, length = MAX_LENGTH_SERIAL_NUMBER)
var serialNumber: String? = null,
@Column(name = "lastLocationDate", nullable = true)
var lastLocationDate: LocalDateTime? = null
) : AbstractPersistence() {
companion object {
const val MAX_LENGTH_SERIAL_NUMBER = 6
}
override fun equals(other: Any?) = other === this
|| (other is Product && idProduct == other.idProduct)
override fun hashCode() = idProduct!!.hashCode()
}
Применение
@SpringBootApplication(scanBasePackages = arrayOf("XX"))
@EntityScan("XXXX.infrastructure")
@EnableJpaRepositories("XXXX.infrastructure.dao")
class Application
fun main(args: Array<String>) {
runApplication<WebApplication>(*args)
}
Кто-нибудь знает, как получить значения из базы данных в реальном времени?