2017-08-22 57 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

查询更清晰吗? –