Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Java 在复合键和@ManyToOne JoinColumns之间共享列_Java_Hibernate_Jpa - Fatal编程技术网

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

Java 在复合键和@ManyToOne JoinColumns之间共享列,java,hibernate,jpa,Java,Hibernate,Jpa,我遇到了一个问题,我不知道仅仅使用hibernate/jpa注释是否可以解决这个问题。问题是,我有一个复合键,它与我的foreignkey复合id中的一个具有相同的列,我希望在表中共享相同的列。例如: @Entity class Id { @Id @Column(name = "idPessoa") public Integer idShared; } @Embeddable class APK { @ManyToOne @JoinColumn(name = "idShar

我遇到了一个问题,我不知道仅仅使用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中使用@JoinColumn,但我得到一个错误,说我需要使用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
它必须查找的列的“name”属性似乎在某种程度上是空的

需要帮忙吗

请看一看。您可以使用
@EmbeddedId
@embeddedable
和/或
@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;
}

难道你不能创建另一个类,如
idshared
,该类具有你的共享id,然后将其加入到bpk和apk中吗?事实上,在我当前的代码中,idshared是另一个类的外键,而apk和bpk都有idshared的外键,但问题是,当我想让FK成为一个内部BI时,我看不到如何共享同一列。我认为解决方案是使用JoinFormula,但我找不到关于它如何工作的文档