Java 如何避免Spring数据Jpa在简单选择上进行连接?

Java 如何避免Spring数据Jpa在简单选择上进行连接?,java,spring,jpa,Java,Spring,Jpa,我有一个带有@ManyToOne链接的实体,当我使用条件执行查询时,spring使用交叉连接,但我只想选择自己的列 本案: public class Job { @Column private Long jobId; @OneToMany(fetch = FetchType.EAGER) @JoinColumn(name="creator", referencedColumnName="uid") private User creator; } public

我有一个带有@ManyToOne链接的实体,当我使用条件执行查询时,spring使用交叉连接,但我只想选择自己的列

本案:

public class Job {

   @Column
   private Long jobId;

   @OneToMany(fetch = FetchType.EAGER)
   @JoinColumn(name="creator", referencedColumnName="uid")
   private User creator;

}

public class User {


   @Column
   private Long uid;

   @Column
   private String name;

}

public Predicate toPredicate(Root<Job> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
    List<Predicate> Predicates=new ArrayList<Predicate>();

   Predicates.add(cb.equal(root.get("creator").get("uid"), 123456));
   query.where(Predicates.toArray(new Predicate[Predicates.size()]));
   return null;
}
我只想创建一个像select这样的查询。。。来自作业,其中用户_id=123456, 但是春天像选择一样执行。。。从作业m交叉连接用户u,其中m.creator=u.uid和u.uid=123456

如何避免在多个链接中使用联接条件,只需在自己的列上选择即可

创建一个查询。即

@Query(value = "SELECT * FROM JOB WHERE USER_ID = ?1", nativeQuery = true)
Job getByUserId(Integer userId);

我认为应该将fetch type设置为lazy:fetch=FetchType.lazy, 或者删除它,默认情况下@OneToMany是懒惰的

这样hibernate而不是spring,将对作业表执行简单的select查询。但是,如果您将其设置为“急切”,hibenate将始终使用用户表上的联接来获取其数据,另一方面,在惰性模式下,只有在执行job.getCreator时,才会触发获取用户数据的查询,但在这种情况下,事务/会话应保持打开状态


关于,

使用条件,如何获得它,作业实体有另一个多通链接实体,并且查询条件是动态的,不固定。Spring不使用任何东西。您选择的JPA提供商可以。为什么不告诉人们是哪一个,以及生成的SQL和JPQL。。。所有这些都在JPA提供商的日志中。Spring不是JPA提供商。还发布生成查询的JPA标准代码的其余部分。用户字段不是@OneToMany。。。只有收藏/地图可以这样!!!从单值字段不能是@OneToMany这一事实中,阅读一些基本的JPA docsapart?是的,绝对应该改为OneToOne