我有两个对象,它们相互引用。拥有一组组列表的用户,以及具有一个管理员的组:
@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
.
这是两个表之间的物理链接。
ownedGroups
在User
实体是一个奴隶领域。它只是为了方便而不是为了持久化,除非你重新配置它。
当您调用 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/