映射与DAO Factory的懒惰关系

时间:2016-02-12 08:09:31

标签: java java-ee mapping dao

我想要做的是在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的情况下手动设置它。

1 个答案:

答案 0 :(得分:0)

从它的外观来看,ResultSet实际上是你从数据库中查询过的数据,所以这个结构中的任何数据都是持久的,对吗?

您可以使用session.load(),因为这将始终返回Hibernate代理,而无需访问数据库。 Hibernate代理是一个只有给定标识符的对象,在本例中是id,所有其他属性尚未初始化,看起来它来自数据库,但它没有,它是实际检索的合成表示实体。当对其执行操作时,如果id引用的数据应该从持久层消失,则代理将抛出ObjectNotFoundException。

我知道这可能不是你所期望的,因为你提到你正在寻找ORM-free solution但是我相信这实际上是为了找到你的其他期望的解决方案的目的,一种通往{{的方式1}}:)

如果您使用JPA,Hibernate的session.get()的等效功能由EntityManager.html#getReference提供