Java 是否需要使用JPA和MySQL获取实体以引用它?
我有一个应用程序,它创建了许多引用其他两个实体的行,也就是说,行中有两个外键引用,它们实现了多个关系 以下是所引用的两个实体:Java 是否需要使用JPA和MySQL获取实体以引用它?,java,mysql,jpa,foreign-keys,Java,Mysql,Jpa,Foreign Keys,我有一个应用程序,它创建了许多引用其他两个实体的行,也就是说,行中有两个外键引用,它们实现了多个关系 以下是所引用的两个实体: 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 othe
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通过EclipseLink使用JPA映射到类a、b和x,这是非常基本的,没有什么特别之处
当我在Java中创建一个X时,我会执行以下操作(请注意,a和b已经存在,我只知道它们的ID—它们是从遗留应用程序馈送的):
问题是我必须插入大约200000个实体,这相当多。有大约3倍于A和B,所以我必须获取200000次A和A B,很可能200000次不同的A和B,所以缓存没什么用
我的问题是:是否真的需要获取整个实体?有没有办法降低这些成本?或者是否有某种方法可以手动设置外键引用(可以归结为整数),而不会失去JPA的好处(即不必编写自己的查询)
问题的另一种表述是:我如何用JPA完成以下工作
INSERT INTO x (`f_a`, `f_b`) VALUES (13, 17);
其中f_a和f_b是外键?您可以使用EntityManager的getReference()
方法获取“引用”实例,而不是使用find()加载实体。这些引用是延迟获取的,因此在您的情况下根本不需要获取它们
您的代码看起来类似:
A a = entityManager.getReference(A.class, knownIdForA);
B b = entityManager.getReference(B.class, knownIdForB);
X x = new X();
x.setA(a);
x.setB(b);
entityManager.persist(x);
但是只有persist()调用才能访问数据库
A a = entityManager.getReference(A.class, knownIdForA);
B b = entityManager.getReference(B.class, knownIdForB);
X x = new X();
x.setA(a);
x.setB(b);
entityManager.persist(x);