投影创造新的领域

时间:2017-07-25 18:28:41

标签: spring spring-data

我有一个类,用于表示两个独立字段中的用户出生日期

public class User {
    private int yearOfBirth;
    private int monthOfBirth;
}

是否可以进行导出用户年龄的投影?我知道我们可以使用@Value连接字段。

2 个答案:

答案 0 :(得分:1)

解决问题的最简单方法(如果可以向域类添加代码)是在用户类中添加一个方法,如下所示:

@JsonIgnore
public int getAge() {
    return Period.between(
            LocalDate.of(dobYear, dobMonth, 1),
            LocalDate.now()
    ).getYears();
}

当您的实体被序列化时,您可以添加@JsonIgnore来阻止春天导出“年龄”字段。添加该方法后,您可以创建如下所示的投影:

@Projection(name = "userAge ", types = {User.class})
public interface UserAge {

    @Value("#{target.getAge()}")
    Integer getAge();

}

答案 1 :(得分:0)

像这样的东西,例如:

public class UserAgeDto {
    private int yearOfBirth;
    private int monthOfBirth;

    public UserAgeDto(int yearOfBirth, int monthOfBirth) {
        // constructor implementation...
    }

    public int getAge() {
        // age calculation...
    }
}

public interface UserRepo extends JpaRepository<User, Long> {

    @Query("select new com.example.myapp.dto.UserAgeDto(u.yearOfBirth, u.monthOfBirth) from User u where u = ?")
    UserAgeDto getUserAgeDto(User user);
}

一些info