如何重写条件查询
@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/