我想要做的是在Bean属性和DAO之间建立一个懒惰的关系。
所以这是我的代码:
Bean文章
public class Article {
private Long id;
private Product product;
private Attribut attribut;
private String name;
private Article ParentArticle;
\\ getters and setters
}
DAO用于将文章映射到Bean
private Article map(ResultSet resultSet) throws SQLException {
Article article = new Article();
\\set the id of the Article
article.setId(resultSet.getLong("id"));
\\get the DAO of each article Bean attribute
ProductDao productDao = daoFactory.getProductDao();
ArticleDao articleDao = daoFactory.getArticleDao();
AttributsDao attributsDao = daoFactory.getAttributDao();`
\\set the product of the article by searching the product with his DAO
article.setProduct(productDao.find(resultSet.getLong("idProduct")));
\\set the Attribut of the article by searching the attribute with his DAO
article.setAttribut(attributsFonctionsDao.trouver(resultSet.getLong("idAttribut")));
\\set the designation of the article article.setDesignation(resultSet.getString("designationArticle"));
\\set the Parent Article by searching the article with his DAO
article.setParentArticle(articleDao.trouver(resultSet.getLong("idArticleParent")));
return article;
}
所以我要问的是,是否有一种方法来映射Article对象属性,所以这里的属性product,attribut和parentArticle只有他们的id而不是对所有Object充电。我知道Hibernate可以提供帮助,但我想在没有ORM的情况下手动设置它。
答案 0 :(得分:0)
从它的外观来看,ResultSet实际上是你从数据库中查询过的数据,所以这个结构中的任何数据都是持久的,对吗?
您可以使用session.load(),因为这将始终返回Hibernate代理,而无需访问数据库。 Hibernate代理是一个只有给定标识符的对象,在本例中是id,所有其他属性尚未初始化,看起来它来自数据库,但它没有,它是实际检索的合成表示实体。当对其执行操作时,如果id引用的数据应该从持久层消失,则代理将抛出ObjectNotFoundException。
我知道这可能不是你所期望的,因为你提到你正在寻找ORM-free solution
但是我相信这实际上是为了找到你的其他期望的解决方案的目的,一种通往{{的方式1}}:)
如果您使用JPA,Hibernate的session.get()的等效功能由EntityManager.html#getReference提供