[英]Hibernate: @ManyToOne(fetch = FetchType.LAZY) does not work on non-primary key referenced column
[英]Fetch Lazy does not work for ManyToOne with composite PK
我有以下數據庫結構
CREATE TABLE a (
id TEXT PRIMARY KEY,
creation_date TIMESTAMP WITH TIME ZONE NOT NULL
);
CREATE TABLE b (
id text
a_id TEXT REFERENCES a,
active BOOLEAN NOT NULL,
creation_date TIMESTAMP WITH TIME ZONE NOT NULL,
modification_date TIMESTAMP WITH TIME ZONE NOT NULL,
version INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY (id, a_id)
);
CREATE UNIQUE INDEX ON b (a_id) WHERE (active);
CREATE UNIQUE INDEX ON b (id) WHERE (active);
和JPA實體,其中B具有復合PK和FK用於A.
@Entity
@Table (name = "a")
class A (
@Id
var id: String
)
@Entity
@Table (name = "b")
class B (
@EmbeddedId
@AttributeOverride (name = "aId", column = Column (name = "a_id", updatable = false))
var pk: Pk,
var active: Boolean
) {
@JoinColumn (name = "a_id")
@MapsId ("aId")
@ManyToOne (cascade = [CascadeType.ALL], fetch = FetchType.LAZY)
var a: A? = null
@Embeddable
class Pk (
var id: String,
var aId: String?
): Serializable {
override fun equals (other: Any?): Boolean {
...
}
override fun hashCode (): int {
...
}
}
}
知識庫
interface BRepository: JpaRepository <B, B.Pk>
我打電話的時候
bRepository.findById (B.Pk ("b_id", "a_id"))
然后在hibernate日志中出現兩個請求
Hibernate: select b0_.a_id as a_id1_1_0_, b0_.id as id2_1_0_, b0_.active as active3_1_0_, b0_.creation_date as creation4_1_0_, b0_.modification_date as modifica5_1_0, your own; and b0_.id =?
Hibernate: select a0_.id as id1_0_0_, a0_.creation_date as creation2_0_0_ from a a__ where a0_.id =?
B實體中的FetchType.LAZY不起作用且加載了A.
如何修復延遲加載的映射?
延遲加載的重點是,當你獲取A時,它不會獲取一對多的映射,因此不會獲取B. 您可以使用FetchType.EAGER來解決此問題。 太了解LAZY和EAGER Fetch類型之間的區別,請看這個答案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.