2017-08-15 96 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特有的,海报未公开 –