没有关系实体的 JPA 存储库 select

JPA Repository select without relationship entity

我有两个实体(休眠)有关系。当我通过 JPA Reposiotory 获取实体时,hibernate 会为两个实体执行 'select'。我如何通过一个 select 获得实体(此时我不需要第二个实体)。

对不起我的英语和技术语言 - 我是初学者。

编辑

用户:

@Entity
public class User {

@Id
@GeneratedValue
private int id;

private String name;

@OneToMany(mappedBy = "user", fetch = FetchType.EAGER)
private List<Medicament> medicaments;

//and others and getters and setters
}

药剂:

@Entity
public class Medicament {

@Id
@GeneratedValue
private int id;

private String name;

@ManyToOne
@JoinColumn(name = "user_id")
private User user;

//and others and getters and setters
}

我从自动装配接口 UserRepository 调用方法:

public interface UserRepository extends JpaRepository<User, Integer>{

@Query("select u from User u where name = :name")
User findByNameQuery(@Param("name") String name);

User findByName(String name);
}

方法 findByNameQueryfindByName 都执行多个 select

改变

@OneToMany(mappedBy = "user", fetch = FetchType.EAGER)
private List<Medicament> medicaments;

@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private List<Medicament> medicaments;

或者根本不指定 FetchType。 @OneToMany@ManyToMany 的默认值是 LAZY@OneToOne

的默认值是 EAGER

@Tomas Kralik 它正在工作!谢谢!

你能告诉我什么更好用吗?

具有 LAZY 获取并在控制器中使用它的实体:

User user = userRepository.findByName(name);
List<Medicament> medicaments = medicamentRepository.findByUser(user);

或使用 EAGER 获取并使用此代码:

User user = userRepository.findByName(name);
List<Medicament> medicaments = user.getMedicaments();

或者我可以根据需要更改此设置(在一种方式中,我将实体与 fetch EAGER 结合使用,而在另一种方式中,我将同一实体与 fetch LAZY 结合使用)?

编辑:

我找到了解决方案: 我已将查询更改为:

@Query("select u from User u JOIN FETCH u.medicaments m where u.name = :name")
User findByNameQuery(@Param("name") String name);

实体用户有获取 LAZY,在我使用的控制器中:

User user = userService.findByName(name);
List<Medicament> medicaments = user.getMedicaments();