2017-08-22 4 views
2

私はお互いを参照している2つのオブジェクトを持っています。グループのリストを所有しているユーザー、および1つの管理があるグループOneToMany関係は、Hibernateを使用するdbに反映されていません

@Entity 
@Table(name="User") 
class User { 
    @OneToMany(mappedBy="admin") 
    List<Group> ownedGroups; 
} 

@Entity 
@Table(name="\"Group\"") // Group is a reserved word, use \" as a work-around 
public class Group implements Serializable { 
    @NotNull 
    @ManyToOne 
    @JoinColumn(name = "admin_id", referencedColumnName = "id") 
    private User admin; 
    User admin; 
} 

私はそれのためのテストをエンドツーエンドの束を書いているグループのコントローラがありますが。テストの1つでは、グループを作成し、管理者が私が期待するユーザーであることをテストします。

Assert.assertEquals("wrong number of groups created for the admin", 1, user.getOwnedGroups().size()); 

デシベルで遊んでいる間、私はowneddGroupsフィールドがUser表にありませんことが判明し、この関係のために作成された何User_Groupテーブルはありません。私はこのフィールドがどのようにdbに保持されているのだろうか?

+0

あなたは '@ Table'アノテーションを使用していませんか?使用している場合は、その部分も入れてください。 –

+0

元の投稿に追加しました。 –

+0

これは完全なユーザーとグループのエンティティです(IDがある場合)。主なキー – Ashish451

答えて

1

admin_idの列は、テーブルgroupにあります。
この列には、表useridが含まれています。
これは、2つのテーブル間の物理的リンクです。

ownedGroupsUserエンティティはスレーブフィールドです。それは、あなたがそれを再設定しない限り、永続性のためではなく便宜のためにのみ使用されました。

group.getAdmin()に電話したとき。休止状態はSELECT * FROM User WHERE id=<admin_id>;になります。
これは1人のユーザーのみを返します。 に電話すると

となります。休止状態はSELECT * FROM Group WHERE admin_id=<id>になります。
これは、グループのリストを返します。

+0

だから、それは飛んで計算されていることを意味しますか? –

+1

クエリが明確になっていますか? –

関連する問題