【发布时间】:2016-06-08 02:43:05
【问题描述】:
我有两个有关系的实体(休眠)。当我通过 JPA Reposiotory 获取实体时,然后休眠为两个实体“选择”。如何通过一次选择获得实体(此时我不需要第二个实体)。
对不起,我的英语和技术语言 - 我是初学者。
编辑
用户:
@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);
}
findByNameQuery 和 findByName 方法都进行多选
【问题讨论】:
-
如果您使用 Criteria api,您可以使用
setFetchMode(FetchMode.LAZY),也可以在您的关系注释中指定fetch=FetchType.LAZY -
贴出这些实体的代码
-
我添加了实体; @Pragnani Kinnera 如何在我的代码中使用 setFetchMode?span>
-
@PragnaniKinnera
Criteria api you can use setFetchMode(FetchMode.LAZY)。我认为这行不通。它反过来工作。我们可以在实体映射中将关系定义为 LAZY,并使用 Criteria 我们可以使用FetchMode.EAGER快速获取它。但是一旦我们在实体映射本身中将它指定为 EAGER,就不能使用 Criteria 或 HQL 来更改它来加载它 LAZY。您可能想尝试一下。
标签: java spring hibernate jpa jpql