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

问题描述 投票:0回答:2

我正在研究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数据可以序列化,但不要持久化。换句话说,我不想在我的数据库中看到'sum'列。

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

我该怎么做?

java spring jpa spring-data jpql
2个回答
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
投票

感谢@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

}
© www.soinside.com 2019 - 2024. All rights reserved.