gpt4 book ai didi

java - 在 Hibernate 中使用实体作为 DTO

转载 作者:行者123 更新时间:2023-12-04 09:19:15 27 4
gpt4 key购买 nike

我正在尝试使用实体作为 DTO。在这里,我使用 setter 为对象设置数据,但是当我获取数据时,会执行查询,该查询尝试获取未保存在数据库中的设置对象
以下是我的代码。在此处设置 MailJob 和 Mail Queue 中的数据,我收到一个逗号分隔的电子邮件值列表:

List<String> emailList = Arrays.asList(mailQueueDto.getToMail().split(","));

List<MailQueue> mailQueues = new ArrayList<>();
MailJobs mailJobs = new MailJobs();
mailJobs.setFromEmail(mailQueueDto.getFromEmail());
mailJobs.setMailMessage(mailQueueDto.getMailMessage());
mailJobs.setSubject(mailQueueDto.getSubject());
mailJobs.setPassword(mailQueueDto.getPassword());
mailJobs.setId(null);
for (String en : emailList) {
String[] parts = en.split(":");
MailQueue m = new MailQueue();
m.setEmail( parts[0]);
m.setName( parts[1]);
m.setMailJobs(mailJobs);
mailQueues.add(m);
}
mailSchedulerService.pushQueue(mailQueues);
现在 pushQueue 方法,我尝试在其中获取相同的设置数据。我这样做是为了可重用性。一旦它使用 get 获取对象,它就会尝试合并到数据库中,执行这里不需要的查询。
public void pushQueue( List<MailQueue> mailQueue) throws MessagingException {
logger.info("Mail Q--->"+mailQueue);
Session session = getSession();
Transport t = session.getTransport();
t.connect();
try {
for (MailQueue mQ : mailQueue) {
//logger.debug("Market->>"+ mQ );
if(mQ.getEmail().isEmpty())
continue;
Message m = getMailMessage( session,
mQ.getMailJobs().getSubject(),
mQ.getMailJobs().getMailMessage().replace("%name%",mQ.getName()),
mQ.getMailJobs().getFromEmail(),mQ.getEmail());
t.sendMessage(m, m.getAllRecipients());

mailQueueService.deleteById(mQ.getId());
}
}
catch (Exception e){
e.printStackTrace();
}
finally {
t.close();
}
}
以下异常抛出为:
org.springframework.dao.EmptyResultDataAccessException: No class >  MailQueue entity with id 0 exists!
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.lambda$deleteById$0(SimpleJpaRepository.java:176)
at java.util.Optional.orElseThrow(Optional.java:290)
at org.springframework.data.jpa.repository.support.Simp
邮件队列实体
package com.iitraa.alumnus.iitAlumnus.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.*;

import javax.persistence.*;

@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class MailQueue {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
private String email;
@ManyToOne( cascade = CascadeType.ALL ,fetch = FetchType.LAZY)
private MailJobs mailJobs;

private boolean complete;

public void setName(String name) {
this.name = name;
}

public void setEmail(String email) {
this.email = email;
}

public void setMailJobs(MailJobs mailJobs) {
this.mailJobs = mailJobs;
}

public String getName() {
return name;
}

public String getEmail() {
return email;
}

@JsonIgnore
public MailJobs getMailJobs() {
return mailJobs;
}

public int getId() {
return id;
}

public boolean isComplete() {
return complete;
}

public void setComplete(boolean complete) {
this.complete = complete;
}

}
基本上我试图使用这个实体作为 POJO 和它的 getter 和 setter 来设置然后获取数据而不保存但是查询被执行并抛出错误。如何防止这种情况?

最佳答案

删除以下代码,因为它可能会调用和删除数据库中的相关对象mailQueueService.deleteById(mQ.getId());

关于java - 在 Hibernate 中使用实体作为 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63122573/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com