我有一个父实体(User)和两个子实体(注册用户和未注册用户),并且使用TABLE PER CLASS策略在数据库表中实现它。
因此我在数据库中有三个表。因此,当用户注册时,我正在创建注册用户实体并保留它。它在Registered User表中创建一条记录,但它不会在User表(父表)中插入任何记录。
有人可以帮忙解决这个问题吗?
提前致谢。
此致 Nirathan
答案 0 :(得分:0)
您可能希望重新阅读InheritanceType
上的Javadoc。
JOINED
SINGLE_TABLE
TABLE_PER_CLASS
您所描述的内容是您的期望与JOINED
更紧密地对齐。在这种情况下,超类的属性将存储在自己的表中,而子类的属性则单独存储在自己的表中。为了访问完整的行,JPA提供程序必须在所有参与的表中执行 JOIN 以获得完整的行。
在TABLE_PER_CLASS
方案中,每个具体实体类型都会有一个表格,在您的情况下会有User
,RegisteredUser
和UnregisteredUser
的表格,因为所有3个都是@Entity
映射。 JPA提供程序将它们视为单独的实体,但允许您在需要时将多态性用于实体映射。
在数据库级别,如果查看表格,您会注意到从User
继承的列也存在于其他两种类型中。创建子类类型RegisteredUser
时,其userName
属性将存储在RegisteredUser
表中,而不是User
表中。
只有直接创建User
,才能将数据存储在User
中。