2017-10-19 92 views
0

林学春数据+ JPA,创造类似的查询:如何序列化一个属性,但不坚持使用弹簧数据?

public interface GroupRepository extends JpaRepository<Group, Integer> { 
    @Query("SELECT g.group, sum(ball) as sum from person ... group by ...", nativeQuery=false) 
    List<Group> BallPerGroup(); 
} 

的回报是:

sum |  group 
10  | group 1 
5  | group 2 
6  | group 3 

我有一个实体组:

public class Group{ 
    @Id @Genera... 
    private Integer id; 
    private String group; 

    //getters and setter 

} 

我有一个实体Person:

public class Person{ 
    @Id @Genera... 
    private Integer id; 
    private String name; 
    private Integer ball; 

    @OneToMany 
    private Group group; 


    //getters and setter 

} 

我想要一个名为sum的属性,那个spring数据可以序列化但不会持久化它。换句话说,我不想在我的数据库中看到'sum'列。

我已经试过@transient但它是空的。

我该怎么办?

+0

告诉我 – Antoniossss

+0

您可以使用数据库视图或提供扩展名(如Hibernate的'@ Formula'注解)库方法签名,如本概述回答:https://stackoverflow.com/questions/43407889/prefered-way-to-map-a-result-set-with-entity-and-count-using-spring-data/43411008#43411008 –

回答

0

为@Antoniossss谢谢!编辑他的回答:

你想要做的是投影,这就是你如何在春季数据中做出 投影。你可以上山,并使用适当的 的构造函数:

@Query(SELECT ... new())(full sum.qualified.name.of.class(s​​um as sum,..... other arguments)from ...)

这就是我所做的和按预期工作。

所以,我添加一个属性与@transient注释:

public class Group{ 
    @Id @Genera... 
    private Integer id; 
    private String group; 

    @Transient 
    private Integer sum; 

    //getters and setter 

} 
+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 - [发表评论](/ review/low-quality-posts/17686603) –

+0

这正是我所做的......'@Query(SELECT new full.qualified.name.of.class(s​​um as sum,... ..其他参数)from ...)'并用'@ transient'注解添加一个属性: –

1

。更改类interface,然后宣布你的方法是这样

public interface GroupInterface { 
privte String groupName; 
private Long sum 
} 

....

@Query(SELECT sum(a) as sum, groupNameColumn as groupName from ... inner join group ... group by ... 
public List<GroupInterface> getMyResults(add some arguments if needed) 

通知,查询必须返回两列

+0

我不想创建一个数据持有者(一个接口)...我想在Group Entity中添加一个属性,但不要坚持它并在可用时序列化 –

+1

你想要做什么是做投影,这就是你如何在春天做投影数据。你可以上山,并使用适当的构造函数'@Query(SELECT new full.qualified.name.of.class(s​​um as sum,..... other arguments)' – Antoniossss

+0

你是说这是不可能的有一个属性可以被序列化,但不会持久? –

相关问题