当前位置: 首页 > 知识库问答 >
问题:

JPA不允许由多个表中的列构成的实体?

陈季
2023-03-14

我知道这是没有意义的,因为许多教程声明您可以使用SecondaryTable注释,但是它在Hibernate中不起作用。我有这样的模式:

@Entity
@Table(name="server")
@SecondaryTable(name="cluster", pkJoinColumns = { @PrimaryKeyJoinColumn(name = "uuid", referencedColumnName = "cluster_uuid") })
public class Server {
    @Id
    @Column(name = "uuid")
    private String uuid;

    @Column(name = "cluster_uuid")
    private String clusterUuid;

      @Column(name = "ip", table="cluster")
      private String ip;
..... }

@Entity
@Table(name = "cluster")
public class Cluster {
    @Id
    @Column(name = "uuid")
    private String uuid;

    @Column(name = "ip")
    private String ip;

.....
}

有人知道如何克服这个问题吗?谢谢你。

共有1个答案

彭烨烁
2023-03-14

我不太明白你的设置。

@secondarytable用于将单个实体存储在多个表中,但在您的示例中,不同实体之间存在多对一的关系(每个实体存储在自己的表中),应该将其映射为:

@Entity 
@Table(name="server") 
public class Server { 
    @ManyToOne
    @JoinColumn(name = "cluster_uuid")
    private Cluster cluster;
    ...
}
 类似资料:
  • 我有一个实体VCenterDistributedVirtualPortgroup,它扩展了VCenterNetwork,两个实体在实体VCenterFolder中处于OneToMany关系中。我得到以下错误:

  • 问题内容: 在JPA 2.0规范 说,第22页: 类的实例变量必须是私有的,受保护的或程序包可见性,而与使用字段访问还是属性访问无关。使用属性访问时,属性访问器方法必须是公共的或受保护的。 为什么不允许公共访问? 问题答案: 对于公共字段,将没有办法使代理可靠地工作-如果有人直接访问字段,那么持久性框架就没有简单的方法来拦截该调用并(例如)初始化包含对象(如果它是代理) 。 如果无法进行字段访问,

  • 问题内容: 我在PHP中运行一个脚本,该脚本uisng循环为MySQL创建了一个字符串查询。 执行脚本后,出现以下错误: “您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以在’UPDATE BANNERS SET pos = 1 WHERE BID = 5; UPDATE BANNERS SET pos = 2 WHERE BID = 1’附近使用正确的语法。在第2行 在错误

  • 这可能是一个复制品。但是经过一天的研究,我希望你能宽大处理。这是一个关于协方差的问题。 为什么我能这么做? 但不能这样做吗? 我读了一些关于协方差的讨论。 “C#中的协方差” “将列表转换为接口列表” “转换列表到接口列表” 我的理解是,我不能将狗的名单添加到动物名单中,因为这样我就可以将猫添加到动物名单中,这将是危险的。但是在动物列表中添加一个猫或狗的例子也同样危险,不是吗?在我看来,C#还没有

  • 我在 Openshift Online v3 入门计划上部署了一个应用程序,该应用程序(过去)运行良好,直到昨天。昨天我不得不发布我的应用程序的新版本。显然,该平台在重新部署它时遇到了一些问题,我不得不取消一些似乎锁定或不断重启的进程。最后,我设法让我的 pod 使用新版本运行,日志看起来很好。 现在的问题是我的应用程序不再暴露。当点击分配给我的URL时,我得到了臭名昭著的“不可用”OO页面: 我