双向一对一错误:为什么Hibernate认为我在使用复合键?
我得到了这个臭名昭著的错误: 外键(FK69848D5097EB6FB4:文档历史记录[VOTERDOC_ID])必须 与引用的主键具有相同的列数 (投票者文档[投票者ID,ID]) 但我没有使用复合密钥。我已经确认,在数据库中,涉及的两个表的PK都是id字段,即VARCHAR。以下是我的实体:双向一对一错误:为什么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
@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;