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

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
双向一对一错误:为什么Hibernate认为我在使用复合键?_Hibernate_Jpa_Composite_One To Many - Fatal编程技术网

双向一对一错误:为什么Hibernate认为我在使用复合键?

双向一对一错误:为什么Hibernate认为我在使用复合键?,hibernate,jpa,composite,one-to-many,Hibernate,Jpa,Composite,One To Many,我得到了这个臭名昭著的错误: 外键(FK69848D5097EB6FB4:文档历史记录[VOTERDOC_ID])必须 与引用的主键具有相同的列数 (投票者文档[投票者ID,ID]) 但我没有使用复合密钥。我已经确认,在数据库中,涉及的两个表的PK都是id字段,即VARCHAR。以下是我的实体: @Entity @Cache(usage = CacheConcurrencyStrategy.READ_ONLY) @Table(name = "VOTER_DOCUMENT") public cla

我得到了这个臭名昭著的错误:

外键(FK69848D5097EB6FB4:文档历史记录[VOTERDOC_ID])必须 与引用的主键具有相同的列数 (投票者文档[投票者ID,ID])

但我没有使用复合密钥。我已经确认,在数据库中,涉及的两个表的PK都是id字段,即VARCHAR。以下是我的实体:

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
@Table(name = "VOTER_DOCUMENT")
public class VoterDocument {

  @Id
  @Column(length = 45, name = "ID")
  @GeneratedValue(generator = "system-uuid")
  @GenericGenerator(name = "system-uuid", strategy = "uuid")
  private String id;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "DOCTYPE_ID", nullable = false)
  private DocumentType documentType;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "VOTER_ID", referencedColumnName = "ID", nullable = false)
  private Voter voter;

  @OneToMany(mappedBy = "voterDocument", fetch = FetchType.EAGER)
  private final List<DocumentHistory> history =
    new ArrayList<DocumentHistory>();

  @OneToMany(mappedBy = "voterDocument", fetch = FetchType.EAGER)
  private final List<VoterFile> files = new ArrayList<VoterFile>();


@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
@Table(name = "DOCUMENT_HISTORY")
public class DocumentHistory {

  @Id
  @Column(length = 45, name = "ID")
  @GeneratedValue(generator = "system-uuid")
  @GenericGenerator(name = "system-uuid", strategy = "uuid")
  private String id;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "VOTERDOC_ID", referencedColumnName = "ID", nullable = false)
  private VoterDocument voterDocument;
此表的主键是COUNTY表中的
country\u ID
字段。我得到的错误是:

MappingException:复合id类必须实现可序列化: 郡的主动选举


再次使用复合键!但是表没有复合键!最后一个也没有!它的主键是县FK。我不明白为什么Hibernate在抱怨。不幸的是,这一次仅仅对注释进行注释和取消注释并不能解决任何问题,这当然是正常的

不知道为什么会这样,但是

我使我的类实现了可序列化,添加了生成的私有静态最终长serialVersionUID,现在它可以工作了


还是不明白为什么。。或者为什么Hibernate认为我在使用复合键…

向我们展示VoterDocument的准确完整代码。不要在一个问题中问几个“古怪”的问题。该问题将以“非真实问题”结束。当“错误消失”时,您很可能遇到了编译问题。很抱歉,我将它们视为相关问题,因为这两个问题都与不存在的复合ID有关。
  @Entity
  @Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
  @Table(name = "ACTIVE_ELECTION")
  public class ActiveElectionForCounty {

  @Id
  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "COUNTY_ID")
  private County county;

  @ManyToOne(fetch = FetchType.LAZY, optional = false)
  @JoinColumn(name = "ELECTION_EVENT_ID")
  private ElectionEvent electionEvent;