JPA MappedSuperclass with ManyToOne



我面临着一种典型的问题。想象一下对象之间典型的1-N关系。确切地说,用户(U)和房间(R):[U]*---1[R]。

问题来了,Room应该是一个抽象基类,例如BlueRoom、RedRoom。如何在用户实体中正确设置关系?

public interface Room { ... }
@MappedSuperclass
public abstract class RoomSuperclass implements Room { ... }
@Entity
public class BlueRoom extends RoomSuperclass { ... }
@Entity
public class RedRoom extends RoomSuperclass { ... }

@Entity
public class User {
  @ManyToOne(targetEntity = ???) // I don't know if it will be BlueRoom or RedRoom
  private Room room; // ManyToOne cannot be applied on mapped superclass
}

我知道这可能可以通过在RoomSuperclass上使用@Entity而不是@MappedSuperclass来解决,但我不确定这是否是一个好的解决方案,是否有更好的解决方案。

MappedSuperclass注释的超类不应该用Entity注释。

关系注释只能与用Entity注释的类一起使用。

您可以用Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)替换MappedSuperclass注释,并将Entity注释添加到您的超类中。

通过这种方式hibernate将为每个类创建一个数据库表。你可以在官方文档中查看其他策略。

已加入一种策略,其中特定于子类的字段被映射到一个独立的表,而不是父类的公共字段,并执行连接来实例化子类。

SINGLE_TABLE每个类层次结构的单个表。

表_类每个具体实体类的表。

根据帖子下面的评论。将超类声明为@Entity是解决方案。

相关内容

  • 没有找到相关文章

最新更新