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

时间:2018-03-28 16:21:44

标签: java spring jpa

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

案例:

#define NS_GET_PARENT   _IO(NSIO, 0x2)
struct stat sb;
fd = open("/proc/1337/ns/user", O_RDONLY);
parent_fd = ioctl(fd, NS_GET_PARENT);

我只想创建类似“select ... from job where user_id = 123456”的查询, 但是春天执行就像“选择......从工作中交叉加入用户u,其中m.creator = u.uid和u.uid = 123456”。

如何避免在ManyToOne链接中使用条件,只需选择自己的列。

2 个答案:

答案 0 :(得分:2)

我认为你应该将fetch类型设置为lazy:(fetch = FetchType.LAZY), 或删除它,默认为@OneToMany为LAZY。

这种方式hibernate(不是spring)会在你的Job表上做一个简单的select查询。但是如果你将它保留给EAGER,hibenate将始终使用User表上的join来获取它的数据,另一方面,使用LAZY模式,获取用户数据的查询将仅在你{{1但是在这种情况下,事务/会话应该保持打开状态。

此致

答案 1 :(得分:0)

创建查询。即。

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

Source