Hibernate复合键与来自不同表的外来引用
我有下面的表结构Hibernate复合键与来自不同表的外来引用,hibernate,composite-primary-key,Hibernate,Composite Primary Key,我有下面的表结构 ID:detail_id event_id:event_id Detail -------------> Association -----------------> Event ------ ----------- ----------- ID(PK) detail_id (PK)(FK)
ID:detail_id event_id:event_id
Detail -------------> Association -----------------> Event
------ ----------- -----------
ID(PK) detail_id (PK)(FK) event_id (PK)
event_id (PK)(FK)
细节表和关联表之间的映射是多对一的。
关联表到事件表多对一之间的映射
Detail table:
@Table(name = "Detail")
class Detail{
private Association association;
@MapsId("detailId")
@manytoone
@JoinColumn(name = "ID", referencedColumn="detail_id")
public Association getAssociation(){
return association
}
//setter
}
AssociationID类-用于复合键
@Embeddable
class AssociationID implements Serializable{
private Long detailId;
private Long eventId;
@column(name = "detail_id")
public Long getDetailId(){
return detailId;
}
@column(name = "event_id")
public Long getEventId(){
return eventId;
}
}
@Table(name="Association")
class Association{
private AssociationID associationId;
private Event event;
private Set<Detail> detailCollection;
@EmbeddedId
public AssociationID getAssociationId(){
return associationId;
}
@MapsId("eventId")
@ManyToOne
@JoinColumn(name="eventId", referencedColumnName="event_id")
public Event getEvent(){
return event;
}
@OneToMany(mappedBy="association")
public Set<FundDetail> getFundDetail(){
return detailCollection;
}
}
@Table(name="Event")
class Event{
private long eventId
@OneToMany(mappedby="event")
private Association association;
}
@可嵌入
类AssociationID实现可序列化{
私有长细节ID;
私人长事件ID;
@列(name=“detail\u id”)
公共长getDetailId(){
返回detailId;
}
@列(name=“event\u id”)
公共长getEventId(){
返回事件ID;
}
}
@表(name=“关联”)
阶级协会{
私人AssociationID AssociationID;
私人活动;
私人收藏;
@嵌入ID
公共AssociationID getAssociationId(){
返回关联ID;
}
@MapsId(“事件ID”)
@许多酮
@JoinColumn(name=“eventId”,referencedColumnName=“event\u id”)
公共事件getEvent(){
返回事件;
}
@OneToMany(mappedBy=“协会”)
公共集getFundDetail(){
退货和收款;
}
}
@表(name=“事件”)
班级活动{
私有长事件ID
@OneToMany(mappedby=“事件”)
私人协会;
}
我获取了detail.association的错误-referencedColumnNames(detail\u id),该关联引用未映射到单个属性的关联。是不是因为我只是在复合键中映射detailId而不是eventId?如果是这样的话,问题是eventId引用了另一个表(Event),而它不在Detail表中。因此,如果复合键引用了两个不同的表,请告诉我如何关联复合键中的字段。请提供一个可复制的示例。此外,问题在哪里?问题就在图片下方。如何使用来自两个不同表的外部引用处理复合键,我得到的hibernate错误没有用上面的代码映射为单个属性。您的问题是什么?解释图表上的箭头及其编号。为什么两个箭头都指向右边?您是什么意思,“在关联表中是否有一个复合键,它包含来自两个不同表的外部引用”?您是在询问图表、代码还是什么?“如何处理”是毫无帮助的含糊不清。(请谈论FKs引用(PK/唯一),而不是from或to,因为我们不知道其中哪一个表示引用您。)请更清楚。给出一个剪切、粘贴和运行的例子来说明你的问题,把你的代码变成一个例子。什么错误消息?请通过编辑澄清,而不是评论。谢谢评论。我已经编辑并添加了更多细节。