2009-12-15 42 views
0

在我看来,当您在Hibernate/JPA中使用关系时,使用像OneToMany这样的关系可以提高读取性能,因为只需要运行一个数据库调用即可获得一个父实体和所有子实体。由于我的应用程序的性质,我想避免使用关系并将外键列映射为常规列。在没有关系的情况下使用Hibernate/JPA并避免多个数据库调用

一个问题是,当我真正要处理的关系,我需要做这样的代码......

ParentEntity pe => someDao.findBySomething("some param"); //db round trip List<ChildEntity 
childEntities = someDao.findChildren(pe); //db round trip 

好像有某种方式来做事一大更手动像我希望在避免额外的往返旅程。有任何想法吗?

回答

1

如果您想避免关系,那么您将失去JPA的显着优势。然而,你仍然可以用Hibernate支持的Native SQL来做你想要的。

+0

,我可以写明白继承和输出优化的SQL一个以上的数据库是非常有用的查询这一事实。我发现只有在你始终想要从DB加载整个对象图的时候才使用关系才是合理的。更不用说使用Hibernate这样的像Warp-Persist这样伟大的库,通过移除样板代码使我的生活变得更加轻松。 – benstpierre 2009-12-15 20:40:59

+0

应该指出的是,非关系实体更适合JAX-RS RESTful Web服务,因为您通常希望返回实体父ID而不是父母本身,并且您不一定要通过写入更多数据来复制数据模型转移对象。 – 2014-05-15 00:25:43

1

你也可以免费使用@NamedQueries和HQL/JPA-QL来代替你的映射。写起来会更容易。例如:

childEntities = someDao.findByQuery("Child.findChildrenOfParent", parentId); 

哪里Parent.findChildren

SELECT c FROM Child c WHERE c.parentId=:parentId 
相关问题