gpt4 book ai didi

java - 如何在 JPA 中定义多态性

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:59 24 4
gpt4 key购买 nike

有一种情况。例如,我正在设计一个简单的博客。有文章和照片。用户可以将他们的评论添加到他们两个。所以当我用 Java 编写它时,它看起来像这样:

public interface Commentable { ... }

public class Article implements Commentable { ... }

public class Photo implements Commentable { ... }

public class Comment {
...
private Commentable commentTo;
}

这很清楚,我希望设计是正确的。但是现在我想将它保存在数据库中并且我想使用 JPA 注释。我主要必须使用 JPA 1.0,但如果没有解决方案,我想知道如何在 JPA 2.0 中使用。我发现有一种经典继承方式,但我认为 Commentable 不应该是这些对象的父对象,它只是设计方面的扩展。

有什么办法可以在不改变设计的情况下坚持下去吗?非常感谢

最佳答案

Is there any way how to persist it without changing of design, please? Thanks a lot

JPA 并不真正支持您的设计(准确地说,如果只有一个实现,您可以映射一个指向接口(interface)的关系,但您的情况并非如此)。不过,您的 JPA 提供者可能对此有一些支持(例如 EclipseLink 有一个 @VariableOneToOne 注释)。

对于标准 JPA,通常的方法是使用抽象类(有或没有您的接口(interface))并使用继承。例如(保留界面):

public class Comment { 
...
@OneToOne(targetEntity=MyAbstractBaseClass.class)
private Commentable commentTo;
}

ArticlePhoto 都将扩展 MyAbstractBaseClass 并实现接口(interface)。

JPA wikibook 有两个关于此主题的很好的部分,请参见下文。

资源

关于java - 如何在 JPA 中定义多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com