gpt4 book ai didi

hibernate - Hibernate 中每个具体类层次结构的表

转载 作者:行者123 更新时间:2023-12-03 08:26:25 26 4
gpt4 key购买 nike

我有以下 Hibernate 映射,必须使用每个具体类层次结构的表进行映射:

<hibernate-mapping package='dao'>
<meta attribute='class-description'></meta>
<class name='PropertyDAO'>
<id name='id' column='id_property'>
<generator class='assigned'/>
</id>
<property name='address' column='address' type='string'/>
<union-subclass name='HouseDAO' table='house'>
<property name='noOfRooms' column='noOfRooms'/>
<property name='totalArea' column='totalArea'/>
<property name='price' column='price'/>
</union-subclass>
<union-subclass name='LandDAO' table='land'>
<property name='area' column='area'/>
<property name='unitPrice' column='unitPrice'/>
</union-subclass>
</class>
</hibernate-mapping>

这意味着在数据库中我只有 2 个表:

  • 房子(id_property(PK),地址,noOfRooms,总面积,价格)
  • 土地(id_property(PK),地址,面积,单价)

据我所知,在这种情况下,需要在调用 .save() 之前显式生成 ID,所以我的问题是:如何创建自动生成 ID 的策略,以便从具体类在连接时形成一个连续的域。

最佳答案

恕我直言,您在数据库中的模型是错误的,因为您在多个相关表中有冗余信息。

Table per concrete class 是一种继承模型,它会在运行时产生问题,因为您可能会遇到这样的情况,即更新 Land 的地址而不是 House 的地址,而它们是相同的(语义上)。 I.o.w.:放弃这个模型并引入每个子类的表,所以你有一个带有 id 和地址的属性基表和两个带有 PK 的独立表,它是属性基础 pk 的 FK,一个是带有房屋特定字段的房子,另一个是带有土地特定字段的土地。

这会给您带来最少的问题,因为它是将实体类型之间的继承转换为关系表的方式(请参阅 Nijssen/Halpin 关于 NIAM/ORM 的书籍)

关于hibernate - Hibernate 中每个具体类层次结构的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/410630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com