2017-08-15 64 views
0

Spring JPA是否可以將Object的Transient屬性映射到別名?將瞬態屬性映射到別名 - Spring JPA

原生查詢

SELECT *, 1 AS liked FROM User WHERE user_id = 123 // + logic to determine if liked 

@Entity 
public class User { 

    @Id 
    private Long userId; 

    @Column(name = "displayName") 
    private String displayName; 

    @Transient 
    private int liked; // not tied to any column 

} 

我試圖實現這一點,但liked總是返回0,它應該是1(和空,如果我定義的字段爲對象類型)

任何幫助表示讚賞!

+0

你可能很少的解決方案,在getter,@PostLoad等重新映射,但通常似乎建立在以前的設計錯誤。 JPA實體是數據庫行的對象表達(非常簡化,不好意思),不應該爲自己弄虛作假。 –

回答

1

您應該使用@Formula標註的字段(見the example

的@Formula註解提供一個SQL代碼段,當它將從數據庫中的實體Hibernate會執行。 SQL片段的返回值被映射到只讀實體屬性。

+0

我對此毫無知識,聽起來完全像我要找的謝謝! –

+0

如果使用標準的JPA,您將不會有任何知識,因爲它是Hibernate特有的,海報未公開 –