在JPA和JSF中使用过时的DTO

时间:2019-02-20 09:31:23

标签: jpa jsf design-patterns

对于后端(JPA)和前端(JSF)之间的数据流,我有点困惑如何正确设置项目

在我上学的时候,我学习了使用DAO(存储库,服务)和DTO的方法,但是实际上,我不再需要使用DTO。这就是为什么我要在这里咨询我如何使用JPA和JSF设置通用框架的原因。

我有以下情况:

实体车:

import javax.persistence.*;
import javax.validation.constraints.Size;
   @Entity
    @Table(name = "cars")
    public class Car {

        @Id
        @Size(min = 1)
        private String identifier;

具有访问数据库的基本功能的存储库:

@Stateless
public class CarRepository implements Serializable {

    @PersistenceContext
    private EntityManager entityManager;

    public List<Car> getAllCars(){
        Query q = entityManager.createQuery("Select c from Car c");
        return q.getResultList();
    }

具有sessionscope的托管bean:

@ManagedBean(name = "carlistbean")
@SessionScoped
public class CarListBean implements Serializable {

private List<Car> cars= new ArrayList();

    @PostConstruct
    public void init(){
        cars = carRepository.getAllCars();
    }

在我的面孔中,我指的是汽车:

<h:dataTable value = "#{carlistbean.cars}" var = "car"

如您所见,我正在跳过DTO部分(以我的理解),但是以另一种方式,我是在实体中“混合” Beanvalidation和JPA定义。

我的汽车实体与另一个实体制造商具有双向关系,可以使用getter方法访问该关系。因此,无需为此创建复合DTO吗?

这是不好的,可以接受的,好的设计吗?您将如何构造2019年的数据流?

1 个答案:

答案 0 :(得分:0)

根据JSF和Java EE专家的建议,像Bauke Scholtz How to use DTO in JSF + Spring + Hibernate和Adam Bien How evil are Data Transfer Objects这样的人最好不要使用DTO对象。