我正在嘗試實作一種使用單個資料庫表來保存多個不同物件型別的應用程式設定的方法。
我想我會使用泛型來做到這一點,但是,我認為我做得不對。這是我的物體到目前為止的樣子:
@Entity
@Table(name = "table_application_settings")
data class ApplicationSetting<T>(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "application_setting_id")
val id: Long? = null,
@Column(name = "application_setting_name")
var name: String = "",
@Column(name = "application_setting_value")
var value: T? = null,
)
我的倉庫:
@Repository
interface ApplicationSettingsRepository : JpaRepository<ApplicationSetting<*>, Long> {
fun findApplicationSettingByName(name: String): ApplicationSetting<*>
}
我的服務:
@Service
@Transactional
class ApplicationSettingsServiceImpl(
private val applicationSettingsRepository: ApplicationSettingsRepository,
) : ApplicationSettingsService {
override fun saveBooleanApplicationSetting(applicationSetting: ApplicationSetting<Boolean>): ApplicationSetting<Boolean> {
return applicationSettingsRepository.save(applicationSetting)
}
override fun saveIntegerApplicationSetting(applicationSetting: ApplicationSetting<Int>): ApplicationSetting<Int> {
return applicationSettingsRepository.save(applicationSetting)
}
override fun getAllApplicationSettings(): MutableList<ApplicationSetting<*>> {
return applicationSettingsRepository.findAll()
}
}
但是,當我嘗試運行應用程式時出現以下錯誤:
Caused by: org.hibernate.AnnotationException: Property com.jre.hireout.database.entities.application.ApplicationSetting.value has an unbound type and no explicit target entity. Resolve this Generic usage issue or set an explicit target attribute (eg @OneToMany(target=) or use an explicit @Type
我知道我遇到了注釋問題,但是我不確定如何修復它以及讓它按預期作業。
uj5u.com熱心網友回復:
JPA 中不支持具有泛型的物體。
您可以獲得的最接近的可能是擁有一個將值保留為 String 的物體,我猜這也是您在資料庫中使用的。
然后有幾種方法可以使用不同的型別回傳值,例如valueAsInt.
您需要自己進行轉換。
另一種方法是具有繼承層次結構。但默認情況下,這會將 映射value到不同的列。我不確定您是否可以將其映射到同一列而不會發生任何事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/519893.html
上一篇:如何檢查和轉換通用型別
下一篇:如何創建我的泛型型別的泛型?
