【发布时间】:2020-09-08 08:10:16
【问题描述】:
我觉得这有点奇怪,我不确定这是否可能,但我的要求如下:
我有两个实体:Dataset 和 Organization。 Dataset 实体具有到Organization 实体的多对一映射。组织有两种类型:Customer 和 Partner。业务要求是只有Partner 类型的组织才能拥有数据集。那么,有没有办法将Dataset 实体映射到Organization,这样Dataset 中的所有外键都只包含Organization 类型为Partner 的实体的ID?
组织实体定义如下:
@Entity
@Table(name = "organization")
public class Organization {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String type;
private String name;
private String address;
private String status;
private String subtype;
@Column(name = "created_date")
@Temporal(value = TemporalType.TIMESTAMP)
private Date createdDate;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "organization_id", insertable = false, updatable = false)
private List<User> users;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({ @JoinColumn(name = "subtype", referencedColumnName = "name", insertable = false, updatable = false),
@JoinColumn(name = "type", referencedColumnName = "organization_type", insertable = false, updatable = false) })
private OrganizationSubType organizationSubType;
// Getters and setters
.
.
.
这里,type 列将包含PARTNER 或CUSTOMER。
这是我目前正在设计的数据集实体:
@Entity
@Table(name="datasets")
public class Dataset {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name="partner_id", nullable = false)
private long partnerId;
@Column(nullable = false, unique = true)
private String name;
private String description;
@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private DatasetStatus datasetStatus;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="partner_id", referencedColumnName="id", insertable = false, updatable = false)
private Organization partner;
//Getters and setters
那么,有没有什么方法可以对映射设置约束,这样当一个新的数据集实体被持久化时,组织 ID 总是属于类型为合作伙伴而不是客户的实体?还是我必须将客户和合作伙伴组织分开为单独的实体?
【问题讨论】:
标签: java hibernate hibernate-mapping