我对如何正确设置项目有关Backend(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年的数据流?
继JSF和Java EE专家建议像Bauke Scholtz How to use DTO in JSF + Spring + Hibernate和Adam Bien How evil are Data Transfer Objects一样,最好不要使用DTO对象。