2017-07-25 79 views
0

我有一個代表出生在兩個分開的領域投影創建新的領域

用戶日期
public class User { 
    private int yearOfBirth; 
    private int monthOfBirth; 
} 

是否有可能作出這樣的出口用戶年齡的投影類?我知道我們可以使用@Value連接字段。

回答

0

來解決問題(如果你可以到域類添加代碼)最簡單的方法是在用戶添加一個方法類像下面這樣:

@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(); 

} 
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

+0

謝謝@ Cepr0,但我一直在尋找一種方式與投影做到這一點 –

+0

可以使用UserAgeDto作爲投影,如圖所示碼。 –

+0

@RafaelTeles您應該提供更多信息 - 您需要什麼,顯示您的實體/回購,您需要的結果模板... – Cepr0