java - OneToMany 关系未反射(reflect)在使用 Hibernate 的数据库中

标签 java hibernate

我有两个对象,它们相互引用。拥有一组组列表的用户,以及具有一个管理员的:

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

有一个组 Controller ,我正在为它编写一堆端到端测试。在其中一个测试中,我创建了一个组并测试管理员是否是我期望的用户。

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

在研究数据库时,我发现 User 表中没有 ownedGroups 字段,也没有创建 User_Group 表对于这种关系。我想知道这个字段是如何保存在数据库中的?

最佳答案

你会发现一个 admin_id表中的列 group .
此列包含 id来自表 user .
这是两个表之间的物理链接。

ownedGroupsUser实体是一个奴隶领域。它只是为了方便而不是为了持久化,除非你重新配置它。

当您调用 group.getAdmin() 时. hibernate 会SELECT * FROM User WHERE id=<admin_id>; .
这将只返回一个用户。

当您调用 user.getOwnedGroups() 时. hibernate 会SELECT * FROM Group WHERE admin_id=<id> .
这将返回组列表。

关于java - OneToMany 关系未反射(reflect)在使用 Hibernate 的数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45808390/

相关文章:

java - Hibernate Master Detail 级联插入

java - 使用 HSQL 时出错 - 2.2

java - 使用 HQL(Hibernate 查询语言)转换查询 Oracle

java - Graphics2D 或 2D Components 的度量单位是什么?

java - 如何在 Clojure 中迭代 TreeMap?

java - 如何验证某些内容是否作为某个执行程序的主体被调用?

java - 尝试在数组中移动和放置元素时不返回正确的值

spring - 如果对象尚不存在,则将其保存在数据库中(Hibernate和Spring)

hibernate - hibernate 插件库未添加

java - 为什么 'wait() method within synchronized block'有可能出现死锁?