0

私のエンティティは次のように見えます

@Entity

    @Table(uniqueConstraints = @UniqueConstraint(columnNames = {"id", "service_version_id"}))
    public class MarketVersion extends AbstractVersion<MarketVersion> {

        @ManyToOne(cascade = CascadeType.ALL)
        private Market market;

        @OneToOne
        private MarketVersion parentVersion;

        @OneToMany(cascade = CascadeType.MERGE)
        @JoinColumn(name = "services_id", referencedColumnName = "id")
        private List<ServiceVersion> services;
}

サービスは次のようになります

public class ServiceVersion extends AbstractVersion<ServiceVersion> {

    @ManyToOne(cascade = CascadeType.ALL)
    private Service service;
    @OneToOne
    private ServiceVersion parentVersion;
    @Column
    private String description;
    @Column(nullable = false)
    @Enumerated(EnumType.STRING)
    private ServiceImplementations implementation;
}

これを実行すると、わかります

[hibernatetool] javax.persistence.PersistenceException: [PersistenceUnit: market] Unable to configure EntityManagerFactory
[hibernatetool] org.hibernate.AnnotationException: Unable to create unique key constraint (id, service_version_id) on table MarketVersion: service_version_id not found

私はこれに慣れていないと確信しています。私は正しいことをしていませんが、理解できません。何をアドバイスしてください

一意の制約を持つ新しいテーブルが必要です (market_version_id および service_version_id)

4

1 に答える 1

0

service_version_idコントライントの列には、エンティティの結合列が列に結合しているときに名前が付けられますservices_id。データベースに列を作成するか、達成しようとしていることに応じてservice_version_id制約列の名前を変更する必要があります。services_id

于 2013-03-06T20:31:16.157 に答える