@Entity
@Table(name = "transaction_data")
public class TransactionData {
@ManyToOne
@JoinColumn(name = "transaction_id")
private Transaction transaction;
@ManyToOne
@JoinColumn(name = "product_id")
private Product product;
@Column(name = "quantity")
private int quantity;
//
List<Map<product, quantity>>
которое "@Transient"
для субд:
https://pypi.org/project/mysql-connector-python/
или postgres:
https://pypi.org/project/psycopg2/
ну а дальше увлекательное путешествие - как распарсить кривую строку которую ввел пользователь)