没有基础表的Hibernate实体
我有一个非常难看的遗留数据库系统,我需要与之集成。 基本上我在系统上做一些只读报告,我不想设置代表我正在处理的每个表的一千个实体。 相反,我想为我生成的每个报告类型定义一个实体(实质上是来自不同表的一堆列的联合),然后让hibernate映射来讨厌(很多联合,很多联合) sql查询到这样的实体列表。
问题是:我可以创建一个没有基础表的实体,并使用sql语句填充所述实体的列表吗?
谢谢!
我们一直这样做 – 这就是我们如何做到的:
-
定义一个简单的类bean对象来表示报表中的每一行输出:
public class CityStateRevenueReport { private String mId; private String mState; private String mCity; private Double mRevenue; public String getId() { return mId; } public void setId(String i) { mId = i; } public String getState() { return mState; } public void setState(String s) { mState = s; } public String getCity() { return mCity; } public void setCity(String c) { mCity = c; } public Double getReveneue() { return mRevenue; } public void setRevneue(Double d) { mRevenue = d; } }
-
定义一个hibernate映射文件,CityStateRevneueReport.hbm.xml:
-
然后运行查询并填充实例:
public List
runReport() { List reports = new ArrayList (); List maps = session.getNamedQuery("runReport").list() for ( HashMap map : results ) { CityStateRevenueReport report = new CityStateRevenueReport(); report.setState(map.get("state")); report.setCity(map.get("city")); report.setRevenue(Double.parseDouble(map.get("revenue")); reports.add(report); } return reports; }
使用实体查询:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#d0e13696
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);
或者在数据库中创建一个视图并映射它。
这是一个使用addEntity的更长的教程:
http://timezra.blogspot.com/2009/05/mapping-hibernate-entities-to-views.html
private Collection findByFirstName() { return sessionFactory.getCurrentSession() // .createSQLQuery(AUTHORS_BY_FIRST_NAME) // .addEntity(AuthorAggregate.class) // .list(); }
如果你可以自由选择hibernate,我建议你看一下Spring JDBC 。 它比hibernate更轻,工作正常。 根据您的要求,它将很好地适应图片。
- 在FlushMode.AUTO背后检查什么?
- Hibernate 4中的SessionFactory.openSession(Connection)
- Spring @Transactional和Hibernate @LockMode注释是如何相关的
- Hibernate参数值与预期类型不匹配
- 如何扩展JAXB,CXF或Hibernate工具生成的Java代码?
- 获取在SessionFactory中设置的所有表名
- 单表inheritanceWITHOUT Discriminator列
- Hibernate PersistentSet remove()操作不起作用
- 如何使用hibernate在spring boot中调用MySQL存储过程?