Я работаю над приложением Kotlin Spring Boot для мониторинга энергопотребления в разных отделах нашего учреждения. Моя реализация ограничена устаревшей базой данных. Мы используем Gradle, и у меня есть только два тонких конфигурационных XML-файла, context-beans.xml
и context-datasources.xml
. Существует файл hibernate-config.xml
(я говорю это, потому что этот файл появился в нескольких решениях, которые я нашел в Интернете).
Я начинаю с этого интерфейса:
interface EnergyHistory {
var id: Int?
var historyRequest: EnergyHistoryRequest?
var endDate: LocalDate?
var totalConsumption: Double?
var onPeakConsumption: Double?
var offPeakConsumption: Double?
var shoulderPeakConsumption: Double?
var therms: Double?
var utilityCosts: Double?
var accountNumber: String?
var ldcId: Int?
}
Вот один из классов, который реализует из EnergyHistory
:
@Entity
@Table(catalog = "energy_history", name = "dept1_energy_history")
data class Department1History(@Id @GeneratedValue(strategy = GenerationType.IDENTITY) override var id: Int? = null,
@ManyToOne @JoinColumn(name = "history_request_id", referencedColumnName = "id")override var historyRequest: EnergyHistoryRequest? = null,
@Column(name = "read_date") override var endDate: LocalDate? = null,
@Column(name = "kwh") override var totalConsumption: Double? = null,
@Column(name = "on_kwh") override var onPeakConsumption: Double? = null,
@Column(name = "off_kwh") override var offPeakConsumption: Double? = null,
@Column(name = "midKwh") override var shoulderPeakConsumption: Double? = null,
@Column(name = "therms") override var therms: Double? = null,
@Column(name = "total") override var utilityCosts: Double? = null,
@Column(name = "pod_id") override var accountNumber: String? = null,
@Column(name = "ldc_id") override var ldcId: Int? = null
) : EnergyHistory
Последним фрагментом кода, объясняющим проблему, является таблица EnergyHistoryRequest.
@Entity
@Table(catalog = "energy_history", name = "history_request")
data class EnergyHistoryRequest(@Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Int? = null,
@Column(name = "account_number") var accountNumber: String? = null,
@Column(name = "ldc_id") var ldcId: Int? = null,
var insertDate: LocalDate? = null,
var utilityType: String? = null)
ПРОБЛЕМА:
Проект компилируется, но во время выполнения я получаю следующую ошибку (elipses усекает трассировку стека до важных частей для удобства чтения):
Failed to load ApplicationContext
java.lang.IllegalStateException: Failed to load ApplicationContext
. . .
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.institution.historyretrieval.domain.Department1AccountHistory.energyHistoryRequest references an unknown entity: com.institution.historyretrieval.EnergyHistoryRequest
. . .
Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.institution.historyretrieval.domain.Department1EnergyHistory.energyHistoryRequest references an unknown entity: com.institution.historyretrieval.EnergyHistoryRequest
Как обновить ресурс пути к классу [org / springframework / boot / autoconfigure / orm / jpa / HibernateJpaConfiguration.class], включив в него класс EnergyHistoryRequest, если он не является XML-файлом, как в базовой Spring?