Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用EcliplseLink JPA如何在持久化对象时禁用所有关系查找?_Java_Jpa_Eclipselink - Fatal编程技术网

Java 使用EcliplseLink JPA如何在持久化对象时禁用所有关系查找?

Java 使用EcliplseLink JPA如何在持久化对象时禁用所有关系查找?,java,jpa,eclipselink,Java,Jpa,Eclipselink,当我使用外键持久化一个对象时,我在日志中看到eclipselink会关闭并执行验证查询,如下所示: 我还看到eclipselink找到这个对象并将其绑定。我不想让它做这两件事 基本上,我试图保存对象A,而A与对象B有关系。当我插入一个新的A时,我所拥有的只是B的ID,而不是类B的实例,在这种情况下,我对获取B的实例不感兴趣 大概是这样的: String b_id = "12345"; A a = new A(); B b = new B(); b.setId(b_id); a.setB(b);

当我使用外键持久化一个对象时,我在日志中看到eclipselink会关闭并执行验证查询,如下所示: 我还看到eclipselink找到这个对象并将其绑定。我不想让它做这两件事

基本上,我试图保存对象A,而A与对象B有关系。当我插入一个新的A时,我所拥有的只是B的ID,而不是类B的实例,在这种情况下,我对获取B的实例不感兴趣

大概是这样的:

String b_id = "12345";
A a = new A();
B b = new B();
b.setId(b_id);
a.setB(b);


//begin tran
try {
    em.persist(a);
//commit
} catch (Exception e) {
    e.printStackTrace();
    //rollback
}
这导致日志中出现以下情况:

Execute query DoesExistQuery(referenceClass=B)
SELECT ID FROM B WHERE (ID = ?)
bind => [12345]
现在我想在不使用Eclipselink的情况下插入A来验证是否存在具有此Id的B,并且我不希望它将此B绑定到A的字段,该字段是B的实例

我不希望Eclipselink将此开销添加到插入中,因为数据库将在插入之前进行此验证,在这种情况下,我不需要实际的B实例


感谢您的回复

这通常是该方法的角色:它创建并返回一个代理给具有给定类和ID的实体,而不命中数据库:

A a = new A();
B b = em.getReference(B.class, bId);
a.setB(b);

我没有EclipseLink的经验,所以我不知道这个查询是什么时候执行的

这通常是该方法的角色:它创建并返回一个代理给具有给定类和ID的实体,而不命中数据库:

A a = new A();
B b = em.getReference(B.class, bId);
a.setB(b);

我没有EclipseLink的经验,所以我不知道这个查询是什么时候执行的

B关系上的级联注释确定了该额外调用。可能您有CascadeType.ALL,您需要的是CascadeType.REFRESH和CascadeType.REMOVE only

B关系上的级联注释确定了该额外调用。可能您有CascadeType.ALL,您需要的是CascadeType.REFRESH和CascadeType.REMOVE only

使用getReference可能是最好的。您还可以在描述符@existencecheckingsuccess\u EXISTENCE上自定义您的性别歧视策略。

使用getReference可能是最好的选择。您还可以在描述符@existencecheckingsuccessive\u EXISTENCE上自定义您的性别歧视政策。

这似乎奏效了!我仍然在日志中看到select和bind,但我不再看到Execute query DOESDISTQUERY,因此我假设我们处于清除状态。谢谢这似乎奏效了!我仍然在日志中看到select和bind,但我不再看到Execute query DOESDISTQUERY,因此我假设我们处于清除状态。谢谢