Java 关于DTO模式实现

Java 关于DTO模式实现,java,hibernate,design-patterns,Java,Hibernate,Design Patterns,请告知DTO模式是什么,因为我从分析中得出的结论是,它是数据传输对象模式,请您特别在Hibernate或任何其他java示例中给出它的任何示例,谢谢DTO是EJB2.1(统称为Sun Blueprint Catalog)中发现的可怕持久性的解决方案之一。它用于从实体bean中提取数据并将其传递到数据层。来自该层的数据被放置在DTO中并放入实体bean中。这仅适用于bean管理的持久性 这就是DTO的正式含义。今天,在客户机-服务器体系结构中将数据从后端传输到前端时,您也会发现这一点 如果要在Hi

请告知DTO模式是什么,因为我从分析中得出的结论是,它是数据传输对象模式,请您特别在Hibernate或任何其他java示例中给出它的任何示例,谢谢

DTO是EJB2.1(统称为Sun Blueprint Catalog)中发现的可怕持久性的解决方案之一。它用于从实体bean中提取数据并将其传递到数据层。来自该层的数据被放置在DTO中并放入实体bean中。这仅适用于bean管理的持久性

这就是DTO的正式含义。今天,在客户机-服务器体系结构中将数据从后端传输到前端时,您也会发现这一点

如果要在Hibernate中使用此选项,请创建用于选择所需列的查询/条件,然后使用AliasToBeanResultTransformer在DTO中设置这些列:


DTO是EJB2.1(统称为Sun Blueprint Catalog)中可怕持久性的解决方案之一。我找不到这方面的参考资料,蓝图网站和EAA的P都提到了与远程处理相关的DTO。此外,即使使用一个健全的ORM,也有理由使用DTO——它们精确地指定调用数据访问代码的层所需的数据,而不是总是移交整个数据库。这也有助于防止N+1问题。您是否使用它们取决于您的喜好在干性与明确性之间的比例。来源:DTO通常与数据访问对象结合使用,以从数据库检索数据。这是一个例子。我不是说完全没有理由使用DTO,但我确实认为它被过度使用了。我不是说这不是DTO的有效用例,因为它的简化定义是在应用层之间传输数据的对象。我所争论的是,它的目的是为了解决任何问题。因为有充分的理由有意识地使用它。这些充分的理由并不是这种类型的对象的原因,我不会称之为模式,因为它不是一开始就被创造出来的。如果您查看Blueprint目录,您会发现这些模式的唯一目的是使使用EJB更容易。EJB3的引入使其中一些已经过时,这让我想知道什么样的设计模式只有在不推荐的技术中才有意义,而不是在DTO中。当然,你不会从Sun/Oracle那里听到这些。我也不明白为什么Martin Fowler会谈论EJB中的设计决策。反映了我对DTO的看法。我只是不同意最后一段的最后三句话。
List resultWithAliasedBean = 
    s.createCriteria(Enrolment.class)
        .createAlias("student", "st")
        .createAlias("course", "co")
        .setProjection(
            Projections.projectionList()
                add( Projections.property("co.description"), "courseDescription" )
        )
        .setResultTransformer( new AliasToBeanResultTransformer(StudentDTO.class) )
    .list();

StudentDTO dto = (StudentDTO)resultWithAliasedBean.get(0);