Составные ключи с использованием IdClass в Hibernate для составных ключей при использовании DataJpaTest - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть класс JPA, подобный этому

@Data
@Entity
@Table(name = "oss_org_discount")
@IdClass(OrganizationDiscountPK.class)
public class OrganizationDiscount {
    @Id
    @OneToOne(fetch = FetchType.LAZY)
    @EqualsAndHashCode.Exclude
    @JoinColumn(name = "Org")
    @ToString.Exclude
    private Organization organization;

    @EqualsAndHashCode.Include
    @ToString.Include
    private String getOrganizationId() {

        return organization.getId();
    }

    @Id
    @Column(name = "Discount")
    private String discountId;

    private String active;

    @Contract(pure = true)
    public boolean isActive() {

        return "Y".equals(active);
    }

    public void setActive(final boolean active) {

        this.active = active ? "Y":"";
    }
}

И IdClass.

@Data
public class OrganizationDiscountPK implements Serializable {
    private Organization organization;
    private String discountId;
}

При просмотре журналов я вижу следующее сгенерированное.

Hibernate: alter table oss_org_discount add constraint UK_ecc64ehkc31t6kf0hcdwj1tvi unique (org)

Мой вопрос: разве это не должно показывать что-то вроде

Hibernate: alter table oss_org_discount add constraint UK_ecc64ehkc31t6kf0hcdwj1tvi unique (org, discount)

Не уверен, является ли это ошибкой с моей стороны или ошибкой в ​​Hibernate.

Хотя я это вижу ... .

Hibernate: create table oss_org_discount (discount varchar(255) not null, active varchar(255), org varchar(255) not null, primary key (discount, org))

Итак, еще один вопрос: зачем создавать уникальное ограничение?

1 Ответ

0 голосов
/ 10 апреля 2020

Проблема была OneToOne на Organization. Это должно быть @ManyToOne

...