我有一個應用程序創建了很多引用兩個其他實體的行,即在實現ManyToOne關係的行中有兩個外鍵引用。是否有必要使用JPA和MySQL獲取實體以引用它?
這些是所引用的兩個實體:
CREATE TABLE a (
`id` INT NOT NULL auto_increment,
-- lots of other attributes,
PRIMARY KEY (id)
)
CREATE TABLE b (
`id` INT NOT NULL auto_increment,
-- lots of other attributes,
PRIMARY KEY (id)
)
這是引用實體A和B:
CREATE TABLE x (
`id` INT NOT NULL auto_increment,
`f_a` INT NOT NULL,
`f_b` INT NOT NULL,
CONSTRAINT `FK_a` FOREIGN KEY (`f_a`) REFERENCES `a` (`id`),
CONSTRAINT `FK_b` FOREIGN KEY (`f_b`) REFERENCES `b` (`id`),
)
的a,b和x被映射到類A,B ,以及通過EclipseLink使用JPA的X,這是非常基本的,沒有什麼奇怪的。
當我在Java中創建一個X我做了以下(注意A和B已經存在,我只知道他們的標識 - 他們是從遺留應用程序feeded):
A a = entityManager.find(A.class, knownIdForA);
B b = entityManager.find(B.class, knownIdForB);
X x = new X();
x.setA(a);
x.setB(b);
entityManager.persist(x);
的東西是我必須插入大約20萬個實體,這是相當多的。大約是As和Bs的3倍,所以我必須獲得200,000次A和B,最有可能是200,000個不同的A和B,所以我無法使用緩存。
我的問題是:是否真的有必要獲取整個實體?有沒有辦法降低這些成本?或者有什麼方法可以手動設置外鍵引用(可以歸結爲整數)而不會失去JPA的好處(即不必編寫我自己的查詢)?
問題的另一種表述:如何使用JPA完成以下內容?
INSERT INTO x (`f_a`, `f_b`) VALUES (13, 17);
其中f_a和f_b是外鍵?