如何使用 Ebean 对元素集合强制执行唯一约束

问题描述 投票:0回答:1

我一直在尝试对此进行变体,但我似乎无法让 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
1个回答
0
投票

在链接到这里的 Ebean 文档的限制部分中,它说

@Embeddable 类不支持@OneToMany / @ElementCollection。

由于 @Embeddable 没有身份,支持集合的情况变得很难看。现阶段没有计划对此提供支持。

并且您已经确定将

DefaultAccount
更改为实体可以解决问题,所以我认为您已经确定了解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.