我有一个类,用于表示两个独立字段中的用户出生日期
public class User {
private int yearOfBirth;
private int monthOfBirth;
}
是否可以进行导出用户年龄的投影?我知道我们可以使用@Value连接字段。
答案 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