Как вернуть несколько столбцов в JPA для электронной почты? - PullRequest
0 голосов
/ 14 мая 2019

Я написал программу, в которой разрешил моей программе бесконечно собирать записи из моей таблицы emailqueue, чтобы она могла обрабатывать записи и отправлять электронную почту посторонним. Сначала код выглядит так:

 MySqlConnect con=new MySqlConnect();
    public PreparedStatement preparedStatement = null;

    public Connection con1 = con.connect();



    //pick up queue and send email
    public void email() throws Exception {


        try{

            while(true) {
                String sql = "SELECT id,user,subject,recipient,content FROM emailqueue WHERE status='Pending' ";
                PreparedStatement statement = con1.prepareStatement(sql);
                ResultSet rs = statement.executeQuery();



                while (rs.next()) {

                    String subject = rs.getString("subject");

                    String recipient = rs.getString("recipient");

                    String content = rs.getString("content");

                    String id = rs.getString("id");
                    String username = rs.getString("user");

                    String emailStatus = "DONE";
                    String errormsg=sendEmail(recipient, subject, content, id,username);
                    if (!errormsg.equals("")) {
                        emailStatus = "FAILED";

                    }
                    TerminalLogger.printMsg("Status  : " + emailStatus);

                }
                statement.close();
                rs.close();

            }

Как видите, я использовал драйвер JDBC, чтобы получить значение каждого столбца в таблице и передал их sendEmail, где он работает, чтобы отправлять электронную почту. Конечно, пока все работает без нареканий.

Теперь я хочу достичь той же цели с помощью JPA, потому что я хочу больше узнать об этом, и я новичок в этом. Поэтому я добавил отображение базы данных в свою таблицу электронной почты, как показано ниже:

Emailqueue.java

@Entity
@Table(name = "emailqueue")

public class Emailqueue {
    private long ulnodeid;
    private String user;
    private String subject;
    private String recipient;
    private String content;
    private String status;

    @Id
    @Column(name = "ID")
    public long getUlnodeid() {
        return ulnodeid;
    }

    public void setUlnodeid(long ulnodeid) {
        this.ulnodeid = ulnodeid;
    }

    @Basic
    @Column(name = "USER")
    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    @Basic
    @Column(name = "SUBJECT")
    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    @Basic
    @Column(name = "RECIPIENT")
    public String getRecipient() {
        return recipient;
    }

    public void setRecipient(String recipient) {
        this.recipient = recipient;
    }

    @Basic
    @Column(name = "CONTENT")
    public String  getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Basic
    @Column(name = "STATUS")
    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }







    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Emailqueue that = (Emailqueue) o;
        return ulnodeid == that.ulnodeid &&
                user == that.user &&
                Objects.equals(subject, that.subject) &&
                Objects.equals(recipient, that.recipient) &&
                Objects.equals(content, that.content) &&
                Objects.equals(status, that.status);
    }

    @Override
    public int hashCode() {
        return Objects.hash(ulnodeid, user,subject,recipient,content,status);
    }
}

Я написал метод для извлечения записей из таблицы, используя Entity Manager, ниже:

public Emailqueue getrecords() {
        try {

            String sql = "select object(o) from Emailqueue as o where " +
                    "status='" + "Pending" + "'";

            List resList = em.createQuery(sql).getResultList();
            if (resList == null) {
                throw new Exception("Error with selection query.");
            }

            if (resList.size() > 0) {
                return (Emailqueue) resList.get(0);
            }

           // msg = "Setting <" + name + "> not found.";

            return null;
        } catch (Exception e) {

            msg = CoreUtil.wrapMsg(CoreUtil.FUNC_ERROR,
                    this.getClass().getName(), "get(" + "Pending" + ")", e.getMessage());


            return null;
        }
    }

Мне в основном нужны recipient,subject,content,id and username записи, чтобы я мог передать их вметод.Как получить значения для каждой строки, в которой статус находится в состоянии ожидания в этом случае, с использованием JPA?

Редактировать:

Используя цикл for:

public void email() throws Exception {


        try{

            while(true) {

                String sql = "select p.id,p.user,p.subject,p.recipient,p.content from Emailqueue p where " +
                        "status='Pending'";
                List<Emailqueue> emailList = em.createQuery(sql).getResultList();
                for (Emailqueue obj : emailList) {
                    String emailStatus = "DONE";
                    String errormsg=sendEmail(obj.getRecipient(), obj.getSubject(), obj.getContent(),obj.getUlnodeid(),obj.getUser());
                    if (!errormsg.equals("")) {
                        emailStatus = "FAILED";
                    }
                    TerminalLogger.printMsg("Status  : " + emailStatus);
                }

            }

1 Ответ

2 голосов
/ 14 мая 2019

Попробуйте заменить вызов запроса на:

List<Emailqueue> res = em.createQuery("SELECT e from Emailqueue e WHERE e.status='Pending'",
                                          Emailqueue.class).getResultList();

Это вернет список совпадающих экземпляров в виде объектов Java (сущностей), с которыми вы можете легко работать, например, вызывая getters / setters (используяметод sendEmail из вашего вопроса):

for (Emailqueue eq : res) {
   sendStatus = sendEmail(eq.getRecipient(), eq.getSubject(), eq.getContent(), eq.getId(), eq.getUsername());
}

Или, что еще лучше, измените сигнатуру sendEmail на sendEmail(Emailqueue eq) и вызовите метод получения в методе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...