我一直在尝试对此进行变体,但我似乎无法让 Ebean 识别该约束。
@ElementCollection
@CollectionTable(schema = "participants", joinColumns = @JoinColumn(name = "role_id"), uniqueConstraints = {
//The presence of actual column names in this line is an unfortunate consequence of eBean and JPA annotations
@UniqueConstraint(columnNames = {"integration_tag", "role_id"})
})
private final List<DefaultAccount> defaultIntegrationAccounts = new ArrayList<>();
作为参考,这里是默认帐户:
@Embeddable
public class DefaultAccount {
@NotNull
private final String integrationTag;
@NotNull
@ManyToOne
private Account account;
DefaultAccount(String integrationTag, Account account) {
this.integrationTag = integrationTag;
this.account = account;
}
public String getIntegrationTag() {
return integrationTag;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
}
奇怪的是,如果将 DefaultAccount 设为一个实体而不是可嵌入的,一切都会正常工作,但这违背了域建模,我真的不想走这条路,除非我绝对必须......
在链接到这里的 Ebean 文档的限制部分中,它说
@Embeddable 类不支持@OneToMany / @ElementCollection。
由于 @Embeddable 没有身份,支持集合的情况变得很难看。现阶段没有计划对此提供支持。
并且您已经确定将
DefaultAccount
更改为实体可以解决问题,所以我认为您已经确定了解决方案。