2016-03-20 19 views
0

@OneToManyと@ManyToOneとそのセッターとゲッターを2つのテーブルにマップしているので、ユーザーは複数のトランザクションを持つことができ、トランザクションは1人のユーザーしか持てません。OneToManyとManyToOneの関係

ユーザーのリストにトランザクションを追加すると、データがテーブルに正しく入り、ユーザーのゲッターを使用してトランザクションを取得できます。しかし、トランザクションのゲッターを使用して所有者を見つけると、それぞれのユーザーがusersテーブルから見つかりません。

リバースは、私が取引データをユーザに設定した場合、データベースに保存され、ユーザがトランザクションのゲッターを使用して取得することができますが、ユーザーのゲッターの使用は任意のトランザクションを示していない、また、利用可能..です

ユーザーのリストにトランザクションを追加して、トランザクションのユーザーを設定することしかできません。なぜこうなった?私はこのアクションの1つだけを使用すると、その逆は自動的に利用可能になるはずだと思った。

ユーザー

@Entity 
@Table(name = "users") 
public class User{ 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private int id; 
@OneToMany(mappedBy = "user") 
private Collection<Transaction> transactions; 

トランザクション

@Entity 
@Table(name="user_transactions") 
public class Transaction{ 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private int id; 
@ManyToOne 
@JoinColumn(name = "user_id") 
private User user; 

私は、テーブル内の任意の違い、私は両方のテーブルが同じ構造を持っていない任意のアクションを見ることができません。 JPAはどのようにオブジェクトを保存し、それらを再び構築するのかをJPAは知っていますか?

+0

:あなたがここにカスケードタイプについて読むことができます

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL) private Collection<Transaction> transactions; 

。 POJOを使用し、フィールドをnullのままにすると、フィールドはnullになります。トランザクションをリストに追加しない場合、リストにはトランザクションは含まれません。あなたのオブジェクトの一貫性を維持するのはあなた次第です。 JPAはデータベースからそれらを読み取るときに一貫したオブジェクトを返すでしょう。 –

+0

しかし、私が望むようにこの作品を作るための他の方法はありますか? – Mike

+0

いいえ。トランザクションをユーザーに追加し、トランザクションのユーザーを設定する場合は、トランザクションをコーディングする必要があります。 JPAはそれをしません。 –

答えて

0

私が知る限り、デフォルトのCascadeTypeはありません。 あなたはあなたのケースでは、たとえば、1を指定する必要があります。それは、JPAが指定されている方法ですので、それが起こって http://howtodoinjava.com/hibernate/hibernate-jpa-cascade-types/

関連する問題