spring - 使用 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 。
我想在数据库上运行上述查询。
解决方案
你可以试试这个
创建一个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();
推荐阅读
- mysql - 无法解密从mysql中选择
- javascript - Javascript插入新元素
- java - 如何在 JBPM 7.48 中排除模块
- scala - 在 flink 测试用例中使用模拟类时无法加载用户类:org.mockito.codegen.RestUtil
- windows - 如何使电子应用程序响应 DPI 缩放?
- google-sheets - 如何自动更改句子以添加列表中的单词(Google 表格或 Excel)
- python - FreeFem++ movemesh 不变换网格
- c - 用于比较 C 中数字的类似 strcmp 的接口
- html - 如果文本长于 20 个字符,则在数据表列中显示更多/更少选项
- python - 作为可选参数的函数 python