我正在嘗試使用InheritanceType.JOINED將資料存盤在分層資料庫表中的方法來實作分層結構。需要注意的是,在我們的多租戶解決方案中,每個表都tenant_id需要有一個列(出于安全和合法匯出的原因),盡管在某些情況下這是多余的。這個要求是固定的。
問題是在插入資料時,Hibernate 生成的查詢沒有填寫在tenant_id父子表上,導致約束錯誤。
資料庫中的表如下所示:

抽象車輛物體的代碼:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
abstract class Vehicle(
var tenantId: Int,
var title: String
)
汽車物體:
@Entity
class Car(
override var tenantId: Int,
override var title: String,
) : Vehicle(tenantId, title) {
var numberOfDoors: Int
}
平面物體:
@Entity
class Plane(
override var tenantId: Int,
override var title: String,
) : Vehicle(tenantId, title) {
var numberOfPropellers: Int
}
在資料庫中插入新車時,Hibernate 會生成 2 個查詢,其中tenant_id僅添加到抽象 Vehicle 表中:
insert into vehicle (tenant_id, title) values (?, ?)
insert into car (id, number_of_doors) values (?, ?)
有沒有辦法指示 Hibernate 填寫兩個表上的列?
我發現的一個技巧是tenantId在類上實作一個“第二個”變數并明確指定一個列,如下所示:
@Column(name = "tenant_id")
private val _tenantId: Int = tenantId
但它不是很干凈,一個更簡潔的解決方案會很好。
uj5u.com熱心網友回復:
特別是在我的tenant_id列是資料庫設定的情況下,在tenant_iddb 列上定義計算的默認值也可以作為一種解決方法:
current_setting('app.current_tenant', true)::INT
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382017.html
