Spring JPA 1 Entity обрабатывает 2 таблицы, и у меня есть 2 постоянных метода - PullRequest
0 голосов
/ 06 февраля 2020

По многим вопросам это похоже, но я объясню вам разницу.

У меня есть 10 таблиц, каждая из 10 таблиц имеет одну таблицу истории, то есть всего 20 таблиц.

Normal Table и History Table имеют абсолютно одинаковые столбцы.

Данные поступают в Normal Table, обрабатываются и затем передаются в History Table этой указанной c таблицы.

Имена столбцов являются случайными, они имеют примерно 20 столбцов ( проверьте код, который я добавил ниже )

Normal Table            

╔════╦══════════════╦══════╗
║ Id ║  Name        ║ Etc  ║
╠════╬══════════════╬══════╣
║  1 ║ Jeff Atwood  ║ 1234 ║
║  2 ║ Geoff Dalgas ║ 1234 ║
║  3 ║ Jarrod Dixon ║ 1234 ║
║  4 ║ Joel Spolsky ║ 1234 ║
╚════╩══════════════╩══════╝ 

History of Normal Table

╔════╦══════════════╦══════╗
║ Id ║  Name        ║ Etc  ║
╠════╬══════════════╬══════╣
║  1 ║ Jeff Atwood  ║ 3456 ║
║  2 ║ Geoff Dalgas ║ 3456 ║
║  3 ║ Jarrod Dixon ║ 3456 ║
║  4 ║ Joel Spolsky ║ 3456 ║

║... ║ ............ ║  ... ║
╚════╩══════════════╩══════╝ 

Раньше у меня было 20 entities для 20 таблиц, пока я не обнаружил, что я могу сделать ниже (использовать @SecondaryTable) аннотацию и иметь 10 entities:

@Entity(name = "sepa_card_customers_mandate")
@Table
@SecondaryTable(name = "sepa_card_customers_mandate_history")
public class CardCustomerMandate extends Mandate {

    @Column(name = "RECEIPT_NUMBER")
    private String receiptNumber;

    @Column(name = "GAMES")
    private String games;

    public CardCustomerMandate() {
    }

    public CardCustomerMandate(final Mandate mandate, final String receiptNumber, final String games) {
        super(mandate);
        this.receiptNumber = receiptNumber;
        this.games = games;
    }

    public String getReceiptNumber() {
        return receiptNumber;
    }

    public void setReceiptNumber(final String receiptNumber) {
        this.receiptNumber = receiptNumber;
    }

    public String getGames() {
        return games;
    }

    public void setGames(final String games) {
        this.games = games;
    }
}

Все хорошо, пока здесь. Проблема возникает, когда я использую (persist(Instance T) build в методе JPA, он сохраняет запись в sepa_card_customers_mandate.

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

@Modifying
@Query(value = "INSERT INTO sepa_subscription_credit_mandate_history " +
    " (PLAYER_ID, FIRST_NAME, LAST_NAME, IBAN, BIC, BALANCE, SUBSCRIPTION_ID, DRAW_NUMBER, WINNING_DATE, GAMES, BIT8_UNIQUE_ID, SEPA_UNIQUE_ID, CREATED_AT) " +
    " VALUES(:#{#m.getPlayerId()}, :#{#m.getFirstName()}, :#{#m.getLastName()}, :#{#m.getIban()}, :#{#m.getBic()}, :#{#m.getBalance()}, " +
    " :#{#m.getSubscriptionID()}, :#{#m.getDrawNumber()}, :#{#m.getWinningDate()}, :#{#m.getGames()}, :#{#m.getBit8UniqueId()}, " +
    " :#{#m.getSepaUniqueId()}, :#{#m.getCreatedAt()})", nativeQuery = true)
void saveHistory(@Param("m") SubscriptionCreditMandate m);

Мой вопрос:

Есть ли лучший способ что с помощью нативного запроса?

...