假设我有一个Person,Building和Address类。一个人可以有很多地址,一个建筑物可以有一个地址。在DB中,所有三个都有自己的独立表格。地址表链接的方式是使用fk_id列和类型列。通过将person_id作为fk_id和设置类型存储为“person”来存储人的地址,而对于建筑物,将building_id存储为fk_id并将类型设置为“building”。有没有什么方法可以映射这些关系,或者我需要将数据库转换为使用链接表并执行多对多或仅使用HQL来检索该数据?在休眠状态下,多个一对多/一对一的关系到同一个班级
0
A
回答
0
找到答案,所需要的就是在集合上添加“where”条件。
0
你可以像这样映射你的实体。
<class name="Address">
<id name="addressId" column="addressId">
<generator class="native"/>
</id>
</class>
<class name="Person">
<id name="personId" column="personId">
<generator class="native"/>
</id>
<set name="addresses" table="PersonAddress">
<key column="personId"/>
<many-to-many column="addressId"
unique="true"
class="Address"/>
</set>
</class>
<class name="Building">
<id name="id" column="buildingId">
<generator class="native"/>
</id>
<many-to-one name="address"
column="addressId"
unique="true"
not-null="true"/>
</class>
你只需要一个额外的表PersonAddress。
+0
不幸的是,这不是我要找的。我知道如何实现我所需要的,如果我更改数据库结构,但我想知道是否可以使用我描述的模型(地址表具有可映射到address_id或person_id的fk_id字段以及可以映射到被设置为“person”或“building” – Rocket04
0
您可以映射此像这样:
@Entity
public class Address {
@ManyToOne @JoinColumn(name="person_id")
private Person person;
@OneToOne @JoinColumn(name="building_id")
private Building building;
}
@Entity
public class Person {
@OneToMany(mappedBy="person", targetEntity=Address.class)
private Set<Address> addresses;
}
@Entity
public class Building {
@OneToOne(mappedBy="building")
private Address address;
}
在这个例子中,地址可以有任何一个人或一个大厦(它不应该有两个)。此外,地址被认为是关系的所有者,人或建筑是该关系的“反面”方面。这就是说,要创建对象图,您仍然可以使用级联保存(注释中的“级联”属性),以便您可以在内存中创建所有对象,并简单地保存Person或Building,然后它应该自动保存地址对象以及它。
相关问题
- 1. 在休眠状态下使用一对多关系
- 2. 休眠:一个一对一的关系有太多的疑问
- 3. 休眠:删除实体在一个一对多的关系
- 4. 休眠:选择在一对多关系
- 5. 休眠一对多和多对一的关系
- 6. 休眠一对一关系
- 7. 休眠一对多关系将数据保存到多个表
- 8. 休眠在一个一对多
- 9. JPA(休眠)一对多的关系,空
- 10. 一个一对多的关系休眠错误
- 11. 休眠映射 - 多对一关系
- 12. 如何在休眠状态下表示与同一个表/实体的多对多关系?
- 13. 休眠,获取一个一对多
- 14. 玩! - 在同一个模特班上多对多的关系
- 15. 休眠findByExample上一个多对多的
- 16. 多对多和一对多的休眠关系
- 17. 休眠 - 一对多
- 18. 一对多休眠
- 19. 休眠多个多对一映射
- 20. JPA /休眠 - 多态多对一关系设计
- 21. Laravel:一对多,许多对一个模型一对多关系
- 22. 休眠 - 一对多的关系和孤儿删除级联
- 23. 休眠 - 以一对一的关系
- 24. 无法更新许多在休眠一对多的关系
- 25. 休眠困境,多对多或一对多,然后多对一?
- 26. 休眠二级缓存,一对多
- 27. 休眠一对多级联效率
- 28. 休眠多对一级联删除
- 29. 取特定属性处于休眠一一对多的关系
- 30. 休眠:二许多一对一的关系
你的建筑物与地址有何不同? – Phani
不知道我明白这个问题。该建筑是与地址完全不同的实体。 – Rocket04