如何序列化属性但不使用弹簧数据持久化?

时间:2017-10-19 23:32:15

标签: java spring jpa spring-data jpql

我正在研究spring数据+ 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

}

我有一个实体人员:

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

    @OneToMany
    private Group group;


    //getters and setter

}

我希望有一个名为sum的属性,spring数据可以序列化,但不要持久化。换句话说,我不想看到&#39; sum&#39;我的数据库中的列。

我已经尝试了@transient,但它是空的。

我该怎么做?

2 个答案:

答案 0 :(得分: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)

请注意,查询必须返回2列

答案 1 :(得分:1)

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

  

你想要做的是投影,这就是你的表现   春季数据预测。你可以上山去使用   构造函数:

     

@Query(SELECT new full.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

}