0
私はSpring Data JPAリポジトリを使用しています。私はカードエンティティとトランザクションエンティティを持っています。ユーザーがカードで取引を実行すると、カードと取引(購入/払い戻し)エンティティの両方を保存したいと思います。しかし、ユーザーが次のトランザクションを実行するとき、私はトランザクションエンティティのみを保存します。私は以下のアプローチを試してみましたトランザクションごとに親を保存せずに子エンティティを保存する方法
Card Entity
@Entity
@Table(name = "CARD")
public class Card {
@Id
private Long card_id;
public Long getCard_id() {
return card_id;
}
public void setCard_id(Long card_id) {
this.card_id = card_id;
}
private String type;
}
Transaction Entity
@Entity
@Table(name="Transaction")
public class Transaction {
@Id
@SequenceGenerator(name="TRAN_SEQ1", initialValue=5,sequenceName="TRAN_SEQ1", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="TRAN_SEQ1")
private long id;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "card_id")
private Card card;
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
}
が、それは保存上の例外の下にスロー:私のエンティティがある
Transaction t = new Transaction();
Card c = cardRepository.getOne(123L);
t.setCard(c);
transactionRepository.save(t);
**Exception :
org.hibernate.PersistentObjectException: uninitialized proxy passed to persist()**
私は、私が行方不明ですかわからないです。誰も私をここに案内することができます..
: - あなたのアプローチは成功しました。私は以下のようにオブジェクトを設定しなければならなかった:Transaction t = new Transaction(); \t t.setTransactionId( "E123");カードc1 =新しいカード(); c1.setCard_id(123L); リスト lst = new ArrayList (); t.setCard(c1); lst.add(t); c1.setTransactions(l); cardRepository.save(c1);しかし、あなたは、カード内の取引と取引リストにあるセットカードが、それがうまくいかない周期的になっていると思います。また、あなたはなぜそれが逆の方法で動作していないか教えてください。論理的には、毎回トランザクションを保存するためにcardRepositoryを使用するのは理にかなっていませんか? –
Manu
なぜ正直ではないのか分かりませんが、コードをまとめて試してみる必要があります。理論的には、TransactionRepoとCardRepoを持つことができます。カードを設定する必要がない場合は、トランザクションを設定したり、トランザクションを保存する必要はありません。 – Desorder
逆の関係を必要とせずに取引設定を保存できるはずだと思いますが、以前は間違っていました:) – Desorder