Реализовать JOIN с несколькими таблицами - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть эта таблица, из которой я хотел бы выбрать много строк и использовать JOIN для перевода id в имя из двух таблиц. Я пробовал это:

Основной стол:

@Entity
@Table(name = "payment_transactions")
public class PaymentTransactions implements Serializable {
    ..... 
    @Column(length = 4)
    private Integer merchant_id;

    @Column(length = 4)
    private Integer terminal_id; 
    ......
}

Таблица с дополнительными данными:

@Entity
@Table(name = "merchants")
public class Merchants implements Serializable {

    @Column(name = "id")
    private int id;

    @Column(length = 255)
    private String name;
    .........
}


@Entity
@Table(name = "terminals")
public class Terminals implements Serializable {

    @Column(name = "id")
    private int id;

    @Column(length = 255)
    private String name;
    .........
}

Я пробовал это:

String hql = "select e.* from " + PaymentTransactions.class.getName() + " e "
                + " INNER JOIN " + Merchants.class.getName() + " m "
                + " ON e.id = m.merchant_id AND " 
                + " INNER JOIN " + Terminals.class.getName() + " t "
                + " ON e.id = t.terminal_id "
                + " where e.created_at >= :start_date and e.created_at <= :end_date";

Общая идея заключается в том, что я хочу иметь одну основную таблицу Payment transactions, в которой merchant_id и terminal_id хранятся в виде чисел. С помощью join я хочу получить название Merchant и Terminal. Как правильно реализовать это?

1 Ответ

0 голосов
/ 30 сентября 2019

Вам просто нужно добавить эти переменные в список столбцов в вашем запросе:

String hql = "select e.*, m.name AS merchant, t.name AS terminal"
                + " FROM " + PaymentTransactions.class.getName() + " e "
                + " INNER JOIN " + Merchants.class.getName() + " m "
                + " ON e.id = m.merchant_id AND " 
                + " INNER JOIN " + Terminals.class.getName() + " t "
                + " ON e.id = t.terminal_id "
                + " where e.created_at >= :start_date and e.created_at <= :end_date";

Обратите внимание, что вам нужно будет добавить псевдонимы столбцов, чтобы избежать одинакового имени столбца (name) дважды ввыходной результат. Запрос включает их (например, m.name AS merchant), поэтому вы можете получить доступ к названию продавца в столбце merchant при получении результатов.

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