2017-08-22 96 views
2

我有兩個對象,它們是互相引用。一個用戶擁有組的列表,以及一個集團它有一個管理員:OneToMany關係不反映在數據庫使用休眠

@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; 
} 

有一組控制器,我寫了一堆的端到端測試它。在其中一項測試中,我創建了一個組並測試管理員是我期望的用戶。

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

雖然與DB玩弄,我發現有一個在User表中沒有owneddGroups場,並有此關係創建任何User_Group表。我不知道這個領域是如何堅持在數據庫然後呢?

+0

並且您沒有使用'@ Table'註釋?如果使用,請將該部分也放入。 –

+0

我將它添加到原始帖子中。 –

+0

這是你的完整的用戶和組實體如果是這樣的ID?主鍵 – Ashish451

回答

1

您會在您的表格group中找到admin_id列。
此列包含表user中的id
這是您在兩個表格之間的物理鏈接。

ownedGroupsUser實體中是一個從屬字段。它只用於方便,不用於持久性,除非您重新配置它。

當您撥打group.getAdmin()。休眠將SELECT * FROM User WHERE id=<admin_id>;
這將只返回一個用戶。

當您撥打user.getOwnedGroups()。休眠將SELECT * FROM Group WHERE admin_id=<id>
這將返回一個組列表。

+0

那麼這意味着它是在飛行中計算的? –

+1

查詢更清晰嗎? –