Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何映射涉及抽象类的JPA双向关系?_Jpa_One To Many - Fatal编程技术网

如何映射涉及抽象类的JPA双向关系?

如何映射涉及抽象类的JPA双向关系?,jpa,one-to-many,Jpa,One To Many,假设以下简单模式: 实体表-所有实体共有的属性 entityId, timeCreated,... 注释表-某些实体具有这些注释的集合 entityId, commentId, commentText,.... 人员表。 pensonId (entityId), firstName, lastName,... 以及以下Java继承结构: BaseEntity - abstract - entity, join inheritance with a discriminator Com

假设以下简单模式:

实体表-所有实体共有的属性

entityId, timeCreated,...
注释表-某些实体具有这些注释的集合

entityId, commentId, commentText,....
人员表。

pensonId (entityId), firstName, lastName,...
以及以下Java继承结构:

BaseEntity - abstract - entity, join inheritance with a discriminator
    CommentedEntity - abstract - introduces `comments` collection - mapping tbd
        Person - concrete - entity - mapping trivial
我们如何映射
CommentedEntity
Comment
之间的双向关系?下面的代码是我找到的示例的最佳解释

评论性

@OneToMany(mappedBy="owner", fetch=FetchType.EAGER)
private List<Comment> comments = new ArrayList<>();

  • 因为
    CommentedEntity
    是一个抽象类,所以这不起作用。
    所有者
    引用未知实体
  • 使
    CommentedEntity
    成为一个实体,需要给它一个id,所以我认为这并不意味着 理智
  • 由于多个具体实体将有
    注释
    集合,映射中不能使用具体实体名称

然后我们如何双向映射person.commentList属性

如果
Person
扩展了
CommentedEntity
,那么
Person
实体就不需要
CommentedEntity
所有者,因为
Person是
CommentedEntity`的一部分。换句话说,不需要所有者字段,因为某人是CommentedEntity。

如果
Person
扩展了
CommentedEntity
,那么
Person
实体就不需要
CommentedEntity
所有者,因为
Person
实体是
CommentedEntity`的一部分。换句话说,不需要所有者字段,因为某人是一个CommentedEntity。

但双向映射需要所有者
mappedBy=“owner”
。你能提供一个如何映射的例子吗?你描述它的方式没有双向映射。它只是一个实体,
Person
,它是
CommentedEntity
的子类,是
BaseEntity
的子类。什么东西有
人的集合
?但双向映射需要所有者
mappedBy=“owner”
。你能提供一个如何映射的例子吗?你描述它的方式没有双向映射。它只是一个实体,
Person
,它是
CommentedEntity
的子类,是
BaseEntity
的子类。是什么拥有一群人的集合?你有一个一人一人的评论,但不知道那是什么类型。你的评论中有很多评论?!(你是说Person吗?)只要字段类型是一致的并且是持久的(实体或MappedSuperclass),那么你就应该能够这样做(或者至少我可以使用我使用的实现),抱歉,Neil。我需要做一个简单得多的例子,但我犯了一个错误。问题是关于
CommentedEntity
Comment
之间的双向映射
Person
不起作用,因为它将从其父项继承此映射。很抱歉造成混淆。我已经查看了您提供的链接。我的案例与FK的账户/地址相同。如果您使用具体的
帐户
,我需要添加一个抽象的
注释属性
。那么当你这么做的时候会发生什么呢?(精确异常+堆栈跟踪?或结果)
CommentedEntity
是未知实体。这是一个例外,它是有意义的,因为它没有映射为一个实体。它只是一个中间的抽象类。你有一个OneToMany亲自来输入Comment,但不知道该类型是什么。你的评论中有很多评论?!(你是说Person吗?)只要字段类型是一致的并且是持久的(实体或MappedSuperclass),那么你就应该能够这样做(或者至少我可以使用我使用的实现),抱歉,Neil。我需要做一个简单得多的例子,但我犯了一个错误。问题是关于
CommentedEntity
Comment
之间的双向映射
Person
不起作用,因为它将从其父项继承此映射。很抱歉造成混淆。我已经查看了您提供的链接。我的案例与FK的账户/地址相同。如果您使用具体的
帐户
,我需要添加一个抽象的
注释属性
。那么当你这么做的时候会发生什么呢?(精确异常+堆栈跟踪?或结果)
CommentedEntity
是未知实体。这是一个例外,它是有意义的,因为它没有映射为一个实体。它只是一个中间抽象类。
@ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="entityId", referencedColumnName="entityId")
private CommentedEntity owner;