我正在开发一款用于跟踪客户帐户的应用程序。每个客户可以拥有多个帐户。挑战在于帐户对象是多态的。有一个抽象类,Account
其中包含 2-3 种方法,并且目前有 2 个子类型SavingsAccount
和CreditAccount
。
我尝试让Account
对象使用@MappedSuperclass
注释,然后每个具体类@Entity
都像正常一样有注释。
问题似乎是我的客户对象的映射
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name="customer_id", referencedColumnName = "id")
List<Account> accounts = new ArrayList<>();
当我使用它时,我在 IDE 中收到来自 Spring 的警告,但在运行时我收到此错误。
com.example.models.Customer.accounts' targets the type 'com.example.models.Account' which is not an '@Entity' type
有没有办法对多态对象列表进行 @OneToMany 映射?即使它们存储在同一张表中?
@MappedSuperclass
用于在@Entity
带注释的类之间重用公共属性,并不直接适用于您当前的情况。但是,@MappedSuperclass
您的情况的正确用法示例如下:并让
Customer
继承MyMappedSuperclass
。您需要使用和
Account
注释基类。这将启用多态查询,您可以查询基类并检索其所有子类。如果对所有子类使用单个表,则该类可能如下所示:@Entity
@Inheritance
Account
你的子类将如下所示
我通过此客户实现验证了上述代码:
客户资料库
Flyway 迁移(Postgresql)
PostgresTestContainer配置
测试