[英]Is there any other way to display data from two entities than using dto
例如,我有两个实体: User和JobOffer 。 我想在一页上显示这两个实体的列。 我发现 DTO 可以做到这一点,我的问题是:是否可以不使用 DTO 以不同的方式做到这一点?
用户.java
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_user")
private Integer id;
@Column(name = "name",nullable = false)
private String name;
@Column(name = "last_name",nullable = false)
private String lastName;
@Column(name = "email",nullable = false, unique = true)
private String email;
@Column(name = "password",nullable = false)
private String password;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<JobOffer> jobOffers;
JobOffer.java
@Entity
@Table(name = "job_offer")
public class JobOffer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idjob_offer")
private Integer id;
@Column(name = "title", nullable = false)
private String title;
@Column(name = "location", nullable = false)
private String location;
@Column(name = "description" , nullable = false)
private String description;
@Column(name = "contact", nullable = false)
private String contact;
@Column(name = "category", nullable = false)
private String category;
@Column(name = "company_name", nullable = false)
private String companyName;
@Column(name = "contract_type", nullable = false)
private String contractType;
@Column(name = "working_time", nullable = false)
private String workingTime;
@Column(name = "monthly_pay", nullable = false)
private String monthlyPay;
@Column(name = "position_level", nullable = false)
private String positionLevel;
@ManyToOne
@JoinColumn(name = "id_user")
private User user;
JobOfferDTO.java
public class JobOfferDTO {
private String title;
private String location;
private String category;
private String email;
//getters setters ...
JobOfferRepository.java
@Repository
public interface JobOfferRepository extends JpaRepository<JobOffer, Integer> {
@Query("Select new com.biuropracy.demo.DTO.JobOfferDTO(j.title, j.location, j.category, u.email)
from JobOffer j join j.user u")
public List<JobOfferDTO> getJobOfferDTO();
}
一切正常,但是有没有其他更好或更简单的方法可以在一页上显示这些列?
首先,您需要考虑您在存储库中执行的任务。
现在,让我们看看是否有另一种方法可以在不使用 DTO 的情况下完成这些任务。
现在让我们看看您是否可以在 DAO 级别避免 DTO。 如果您保持实体现在的状态,那么您将需要进行两个单独的查询,然后在服务级别由您自己以编程方式将工作机会与相关用户匹配。 这是join
已经在查询中为您做的事情。
唯一的另一种选择是重构您的实体并创建一个实体来映射用户和工作机会表。 看看这里的例子。 但是话又说回来,您需要在公开之前将该单个实体转换为其相关的 DTO。
最后关于第三个任务,将实体转换为 DTO,如果您决定从查询中检索实体,则需要创建方法来转换为相关的 DTO。 用于将 User 转换为 UserDTO 并将 Job 转换为 JobDTO 的映射器,或者如果您使用工作机会的辅助表创建用户实体,您将拥有一个用于 userJobs 到 userJobsDTO 的映射器。 因此,让您的查询也负责映射,对您来说也是有利的。
我希望这回答了你的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.