Сохранение коллекции с использованием 2 таблиц и сущностей, Java / Spring - PullRequest
0 голосов
/ 12 декабря 2018

Я создаю загрузочный микросервис Spring и создаю слой доступа к данным с использованием сущностей.Я хотел бы отобразить 1 сущность Transactions на 2 таблицы.Первая таблица «транзакции» будет иметь номер транзакции.Во второй таблице также будет использоваться тот же номер транзакции, что и в ее первичном ключе, а также другие атрибуты.Какой самый простой способ сделать это?Другими словами:

@Entity
class Transactions {

    @Id
    private Long transactionId;

    ??@OneToMany?? ( <--what do I put here?)
    private List<Groceryitem> items;
}

В первой таблице будут храниться длинный идентификатор транзакции и список из GroceryItem, например, так:

Table: transactions
 ______________________
|                      |
| transactionId: Long  |
|                      |
| List<GroceryItem>    |
|______________________|

, по сути, первая таблица будет выглядетьthis:

 transcation_id     |  
 --------------------
 1          
 2         

Продуктовый элемент - это класс, который содержит поле Float price примерно так:

class GroceryItem {
    private String itemName;
    private Float price;

    Float getPrice() {
        return this.price;
    }

    String getName() {
        return this.itemName;
    }
}

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

Table: items
 ______________________
|                      |
| transactionId: Float |
|                      |
| List<GroceryItem>    |
|                      |
| name:    String      |
|______________________|

Вторая таблица будет выглядеть следующим образом:

 transaction_id     |    name    |    price    
 ------------------------------------------
 1                     carrot        15.00
 1                     apple         13.99
 2                     apple         3.00

Как правильно аннотироватьклассы "Транзакция" и "Бакалея"?

1 Ответ

0 голосов
/ 13 декабря 2018

Хорошим решением в вашем случае является использование однонаправленного отношения One ко многим, где у вас есть список GroceryItem в классе Transaction.Вы можете сделать это следующим образом:

@Entity
public Transaction {
...
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "transaction_id")
private List<GroceryItem> items = new ArrayList<>();
...
}

и

@Entity
public class GroceryItem {
...
}

В случае, если у вас есть отношение один к одному, например, Транзакция + Детали транзакции.Можно подумать о @SecondaryTable, где часть сущности может храниться в одной таблице (TRANSACTION), вторая часть может храниться во второй таблице (TRANSACTION_DETAILS)

...