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

在复合键和@ManyToone JoinColumns之间共享列

姚烨
2023-03-14

我遇到了一个问题,我不知道是否可以通过使用Hibernate/JPA注释来解决这个问题。问题是,我有一个复合键,它的列与我的foreignkey复合id中的一个相同,我希望在表中共享这个相同的列。例如:

@Entity
class Id {
  @Id
  @Column(name = "idPessoa")
  public Integer idShared;
}

@Embeddable
class APK {
  @ManyToOne
  @JoinColumn(name = "idShared")
  public Id idShared;
  public String nKey;
}

@Entity
class A {
  @EmbeddedId
  public APK id;
}

@Embeddable
class BPK {
  @ManyToOne
  @JoinColumn(name = "idShared")
  public Id idShared;
  public Integer nCode;
}

@Entity
class B {
  @EmbeddedId
  public BPK id;

  @ManyToOne
  @JoinColumns({ @JoinColumn(name = "idShared", nullable = false, insertable = false, updatable = false), @JoinColumn(name = "nKey", nullable = false) })
  public A a;
}

问题是我如何在A和B之间共享idShared列,并在@manytoone中使用它作为外键?

我已经尝试在名为idShared的@JoinColumns中使用@JoinColumns,但我得到一个错误,说我需要使用insert=false和update=false;我已经放入insertable=false和UPDATABLE=false,但随后我得到另一个错误,说我不能混合使用。

我找到了一个可能的解决方案,即使用:

@ManyToOne
@JoinColumnsOrFormulas(value = {
@JoinColumnOrFormula(formula = @JoinFormula(value = "idShared", referencedColumnName = "idShared")),
@JoinColumnOrFormula(column = @JoinColumn(name = "nKey", nullable = false)) })
public A a;
Unable to find column with logical name  in table A

请帮忙!

共有1个答案

万博涛
2023-03-14

请看关于复合主键的官方Java EE6教程。可以使用@embeddedId@embeddable和/或@idclass注释。

例如

// File: APK.java ---------------------
@Embeddable
public class APK implements Serializable {
  public Integer idShared;
  public String nKey;
}

// File: A.java ---------------------    
@Entity
public class A {
  @EmbeddedId public APK id;
}
 类似资料:
  • 有人知道解决这个问题的办法吗?或者这是不可能使用Hibernate/JPA进行映射的吗? Edit:Article和Location的(简化)定义(真的没那么有趣,重要的是它们使用了复合主键):

  • 问题内容: 是否有使用节点,表达和redis / predis共享PHPSESSID的最新指南(或示例代码)? 我发现有1-2年的一些教程,它们都使用旧版本的Express或不使用Express。 Express cookie解析器也已弃用。 https://simplapi.wordpress.com/2012/04/13/php-and-node-js-session-share- redi/

  • 我正在做一个phonegap应用程序,我不能在index.html和inappbrowser窗口之间共享数据。我尝试了这段代码,但它对我不起作用。 我还尝试使用localStorage,但只将inappbrowser的数据共享到index.js,而不是将index.js的数据共享到inappbrowser。

  • 我有两个问题。我理解,如果我在cookie中指定域为(带前导点),那么所有子域都可以共享一个cookie。 是否可以访问在中创建的cookie(没有子域)? 如果在中创建,(没有子域)是否可以访问cookie?

  • 问题内容: 有没有办法在Netbeans和Eclipse之间共享相同的* .java文件? 问题答案: 您可以将eclipse项目导入netbeans, 或者,您可以从现有资源创建Eclipse项目。

  • Windows版本和内部版本2004(操作系统内部版本19037.1) windows上安装的docker 运行诸如,,,等命令都可以正常工作。现在我想推一个图像,所以当然我必须先登录。 我在WSL终端中运行