首页 > 解决方案 > 使用 jpa 和 hibernate 查询未映射的实体

问题描述

我是 spring、hibernate 和 jpa 的新手。问题陈述是打一些报告数据库和表中的记录。我正在使用 spring boot 来创建我的 REST 应用程序。现在我要从中选择数据的表很大,我不想为该表创建实体需要根据某些条件查询表并选择四列作为输出(从大约 60 列中)。我试图在我的 DAO 层中使用 javax.persistence.EntityManager 解决这个问题。但是我到处都得到使用的建议EntityManager 实体必须与某个表进行映射。有没有办法从表中选择结果而不为此生成完整的巨大实体。基本上我想运行一个简单的本机选择查询并获取结果。

SELECT new com.xyz.abc.response.TradeInfo(trade.price,trade.ref,trade.nominal) from Trade trade_tb trade where trade.date between and 。

我想在数据库上运行上述查询。

标签: springhibernatejpa

解决方案


你可以试试这个

创建一个Trade 包含 4 个所需字段的实体。

*只有在Entity中添加了一些字段但在数据库中不存在时,Hibernate才会抛出错误。不是反过来。

现在您可以编写这样的自定义查询并获取 Object

List<Object[]> list = em.createQuery("SELECT t.price, t.ref, t.nominal from Trade t where ... ").getResultList();


for (Object[] obj : list){
    System.out.println(obj[0]); // price
    System.out.println(obj[1]); // ref
}

或者

将字段包装在自定义对象中并将其作为 TypedQuery 执行。

String query = "SELECT NEW SomeObject(t.price, t.ref, t.nominal) from Trade t where ...";

TypedQuery<SomeObject> typedQuery = em.createQuery(query , SomeObject.class);

List<SomeObject> results = typedQuery.getResultList();

推荐阅读