JPA继承建模问题

时间:2011-03-13 06:13:00

标签: java inheritance orm jpa

这是我的问题。我有3个班级,一个代表资金流动的父班。两个子类一个用于收入,另一个用于支出。问题是我是子类来覆盖行为,而不是状态。所以在数据库中我应该只有一个带有类型列的表。我可以使用加入策略来做到这一点,但仍然可以创建收入和支出表吗?无论如何都要映射这个?

基本上我的想法是,只有一个表代表带有type属性的资金流,因此orm知道是否要实例为“Income”或“Expense”。我想这样做是因为区别在于行为而不是状态,因此收入和费用表除了密钥之外不会有任何列。

我可以创建一个类并且具有类型属性,但它会导致非常脏的代码,我宁愿使用polimorphism。而且我的代码看起来更清晰。

2 个答案:

答案 0 :(得分:2)

听起来你所描述的只是Single Table inheritance type。一切都存储在一个表中。您只需指定Discriminator Column,JPA将根据其值决定使用哪种类型的对象。 Discriminator Column的java doc中的示例实现了您想要做的事情。

答案 1 :(得分:0)

这对我来说听起来很合理。一个问题是数据库操作在收入和支出方面是否不同。另一个问题是,预计该模型是否会超越您现在的情况。