Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 如何使用Spring数据在Spring引导中从实体中选择几个字段?_Java_Spring_Spring Boot_Spring Mvc_Spring Data Jpa - Fatal编程技术网

Java 如何使用Spring数据在Spring引导中从实体中选择几个字段?

Java 如何使用Spring数据在Spring引导中从实体中选择几个字段?,java,spring,spring-boot,spring-mvc,spring-data-jpa,Java,Spring,Spring Boot,Spring Mvc,Spring Data Jpa,我有一个用例,我想显示一个实体的内容,但隐藏某些字段。我的实体如下- 实体 public class StudentDetail { @Id private Long ID; private String firstName; private String middleName; private String lastName; @JsonFormat(pattern="dd-MMM-yyyy", timezone="IST") @Temporal(TemporalType.DATE) pr

我有一个用例,我想显示一个实体的内容,但隐藏某些字段。我的实体如下-

实体

public class StudentDetail {

@Id
private Long ID;
private String firstName;
private String middleName;
private String lastName;

@JsonFormat(pattern="dd-MMM-yyyy", timezone="IST")
@Temporal(TemporalType.DATE)
private Date dateOfBirth;
}
它还有许多其他属性,我在这里没有展示

存储库-

@Repository
public interface StudentDetailsRepository extends JpaRepository<StudentDetail, Integer> {
@Query("select d from StudentDetail d where month(d.dateOfBirth) = ?1 ")
    List<StudentDetail> getStudentListBasedOnDateOfBirth(int month);

}
但是,
存储库
类的返回类型是实体类型StudentDetail。仅从中选择几个字段将导致错误。因此,我想知道我应该在
repo
/
服务
controller
类中进行哪些更改(假设只有类的返回类型会更改)

这称为投影,Spring为您提供了两种实现方法。
请记住,JPA术语中存在这种情况,而不仅仅是在春季

以您的
存储库
为起点

@Repository
public interface StudentDetailsRepository extends JpaRepository<StudentDetail, Integer> {
   ...
}
并将方法添加到您的
存储库中

@Repository
public interface StudentDetailsRepository extends JpaRepository<StudentDetail, Integer> {
   StudentDetailProjection get...(...);
}
更深入

此外,必须阅读的是JPA大师弗拉德·米哈尔恰(Vlad Mihalcea)的博客文章


该方法可能看起来像

@Query("select new your.package.StudentDetailProjection(d.firstName, d.middleName, d.lastName) from StudentDetail d where month(d.dateOfBirth) = ?1")
List<StudentDetailProjection> getStudentListBasedOnDateOfBirth(final int month);
@Query(“从StudentDetail d中选择新的.package.StudentDetailProjection(d.firstName,d.middleName,d.lastName),其中月份(d.dateOfBirth)=?1”)
列出getStudentListBasedOnDateOfBirth(最后一个整数月);
这将遵循具体的
选项(2),因为需要构造函数。

这称为投影,Spring为您提供了两种实现方法。
请记住,JPA术语中存在这种情况,而不仅仅是在春季

以您的
存储库
为起点

@Repository
public interface StudentDetailsRepository extends JpaRepository<StudentDetail, Integer> {
   ...
}
并将方法添加到您的
存储库中

@Repository
public interface StudentDetailsRepository extends JpaRepository<StudentDetail, Integer> {
   StudentDetailProjection get...(...);
}
更深入

此外,必须阅读的是JPA大师弗拉德·米哈尔恰(Vlad Mihalcea)的博客文章


该方法可能看起来像

@Query("select new your.package.StudentDetailProjection(d.firstName, d.middleName, d.lastName) from StudentDetail d where month(d.dateOfBirth) = ?1")
List<StudentDetailProjection> getStudentListBasedOnDateOfBirth(final int month);
@Query(“从StudentDetail d中选择新的.package.StudentDetailProjection(d.firstName,d.middleName,d.lastName),其中月份(d.dateOfBirth)=?1”)
列出getStudentListBasedOnDateOfBirth(最后一个整数月);

这将遵循具体的
选项(2),因为需要构造函数。

所以接口只包含我想要在输出JSON中的那些getter?另外,请解释一下存储库代码的更改。这个方法应该包含什么?@BoudhayanDev文档中已经解释了所有内容,包括示例、解释等等。阅读它,并尝试一些东西。@JBNizet我还是添加了这个例子。实现这一点有多种方法,Boudhayan Dev可以阅读Vlad Mihalcea博客文章中的所有详细信息。@BoudhayanDev我更新了答案。看看底部。这就是所谓的构造函数表达式。不过,看看我链接的博客帖子。@BoudhayanDev绝对不是。查询注释中的“新”部分只是告诉JPA它必须实例化将这些值传递给构造函数的类。投影不是一个实体,所以接口只包含我想要在输出JSON中的那些getter?另外,请解释一下存储库代码的更改。这个方法应该包含什么?@BoudhayanDev文档中已经解释了所有内容,包括示例、解释等等。阅读它,并尝试一些东西。@JBNizet我还是添加了这个例子。实现这一点有多种方法,Boudhayan Dev可以阅读Vlad Mihalcea博客文章中的所有详细信息。@BoudhayanDev我更新了答案。看看底部。这就是所谓的构造函数表达式。不过,看看我链接的博客帖子。@BoudhayanDev绝对不是。查询注释中的“新”部分只是告诉JPA它必须实例化将这些值传递给构造函数的类。投影不是一个实体。
@Query("select new your.package.StudentDetailProjection(d.firstName, d.middleName, d.lastName) from StudentDetail d where month(d.dateOfBirth) = ?1")
List<StudentDetailProjection> getStudentListBasedOnDateOfBirth(final int month);