java - 用于在单个实体的对象之间创建层次结构的关系实体
问题描述
我有一个组织实体,它可以有一个父母和/或孩子。组织之间的层次结构需要有额外的列(例如关系类型),所以我创建了一个实体 OrganizationRelationship 用于父母和孩子。我能够让孩子们使用 OneToMany 协会工作,但无法让父母工作(我猜应该使用 ManyToOne)。
我有一个可嵌入的主键,如下所示:
@Embeddable
public class OrganizationParentChildPk implements Serializable {
@ManyToOne(cascade = CascadeType.ALL)
public Organization parentOrganization;
@ManyToOne(cascade = CascadeType.ALL)
public Organization childOrganization;
}
然后是关系实体:
@Entity
@Table(name = "ORGANIZATION_LK")
@AssociationOverrides({
@AssociationOverride(name = "pk.parentOrganization", joinColumns = @JoinColumn(name = "PARENT_ID")),
@AssociationOverride(name = "pk.childOrganization", joinColumns = @JoinColumn(name = "CHILD_ID"))})
public class OrganizationRelationship implements Serializable {
@EmbeddedId
private OrganizationParentChildPk pk = null;
@Column
private String relationshipType = null;
}
最后,这是我的组织实体:
@Entity
@Table(name = "ORGANIZATION")
public class Organization extends Party {
@Column(name = "NAME")
private String name = null;
// ???
private OrganizationRelationship organizationParentRelationship = null;
@OneToMany(mappedBy = "pk.parentOrganization", cascade = CascadeType.ALL,
targetEntity = OrganizationRelationship.class)
private Set<OrganizationRelationship> organizationChildRelationship = null;
}
如果可能的话,我想让父关系字段也使用相同的ORGANIZATION_LK表?
我提前感谢您的帮助。
解决方案
我设法使用以下注释使其工作:
@OneToOne(mappedBy = "pk.childOrganization", cascade = CascadeType.ALL,
targetEntity = OrganizationRelationship.class)
private OrganizationRelationship organizationParentRelationship = null;
推荐阅读
- git - Git 在 Docker 容器中运行太慢
- android - RecyclerView:在可见性之前加载
- symfony4 - symfony datetime 无法映射到实体
- node.js - Node.js child_process.execFile() 不适用于自己的 .exe
- c++ - C ++中文本文件的问题
- php - 使用工具扫描时对过度使用的网络服务器进行故障排除
- ios - 将核心数据对象附加到数组中
- algorithm - 计算键盘序列可能单词的有效算法,无需 T9
- ftp - 通过 VPN 上传站点 FTP
- amazon-web-services - 限制 SQS 以使所有订阅者最多有 1 条动态消息?