java - 如何将 native 查询重写为 JPA 标准

标签 java hibernate jpa

如何重写条件查询

@Query(value = "select count(*), hicn.name \n" +
                "from \n" +
                "  table1 cid, \n" +
                "  table2 hicn \n" +
                "where TRUNC(cid.CREATED_WHEN) = TRUNC(?) \n" +
                "  and hicn.ID = cid.ID\n" +
                "group by  hicn.name", nativeQuery = true)

并将结果放入 DTO 中?

public class DataDto {
    private String name;
    private Long count;

    public DataDto(String name, Long count) {
        this.name = name;
        this.count = count;
    }
}

以实体为例。实体较大,为了方便而缩小。你能用“连接”和“与”来展示解决方案吗?主要问题是我不明白如何访问两个表并使用条件从中获取数据。

对于表1

 @Data
    @Entity
    @Table(name = "TABLE_ONE")
    public class TableOneModel {

        @Id
        @Column(name = "TAB_ONE_ID")
        private Long tabOneId;

        @Column(name = "CREATED_WHEN")
        private Date createdWhen;
    }

对于表2

 @Data
    @Entity
    @Table(name = "TABLE_TWO")
    public class TableTwoModel {

        @Id
        @Column(name = "TAB_TWO_ID")
        private Long tabTwoId;

        @Column(name = "NAME")
        private String name;
    }

最佳答案

Criteria criteria = session.createCriteria(TableOneModel.class);
criteria.setFetchMode("TableTwoModel", FetchMode.JOIN).add(Restrictions.eq("trunc(cid.CREATED_WHEN)", "checkpoint"))
                                                  .setProjection(Projections.projectionList().add(Projections.property("name"), "name")
                                                                                             .add(Projections.rowCount(),"Count")
                                                                                             .add(Projections.groupProperty("name"))).uniqueResult();
List list = criteria.list();

你的目标一定正在寻找与此类似的东西。不过我没有测试代码。我不确定要在 sql trunc 方法中添加什么,因此我在那里添加了 checkpoint 。如果这是一个动态变量,请自行研究如何将其添加到标准中。事实上,这可能更多地取决于您的代码。

关于java - 如何将 native 查询重写为 JPA 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45919917/

相关文章:

java - AttributeOverride 将空值设置为未映射的字段

java - EclipseLink 初始化中的 NullPointerException

java - 自动设置反向引用

java - Jtable保留列宽

java - 通过 TCP 发送大字符串(Java - PHP)

java - 正则表达式:查找第一次出现并映射到规范值

java - 我如何告诉 Hibernate 在自连接 @OneToOne 中忽略 "0"

java - JPA 和 Hibernate 实体的列表属性中的重复项

java - 多个类所需的依赖关系的设计模式(java)

java - persistence.xml 使用 java 配置