苦于外键约束

问题描述

定义某些外键确实有问题。 我有一个发行人,有一个地址。 我有一个国家/地区的地址。

我正在尝试使用这些POJO上的liquibse定义我的外键约束,但是没有运气,仍然是相同的错误

cannot be applied to (Class[_$1],String) ConfluentRegistryAvroDeserializationSchema.forSpecific(

这是我的课程

Caused by: liquibase.exception.DatabaseException: Column "COUNTRY_ID" not found; sql statement:
ALTER TABLE PUBLIC.ADDRESS ADD CONSTRAINT FK_ADDRESS_TO_COUNTRY FOREIGN KEY (COUNTRY_ID) REFERENCES PUBLIC.COUNTRY (ID) [42122-200] [Failed sql: (42122) ALTER TABLE PUBLIC.ADDRESS ADD CONSTRAINT FK_ADDRESS_TO_COUNTRY FOREIGN KEY (COUNTRY_ID) REFERENCES PUBLIC.COUNTRY (ID)]

@Entity
@Table(name = "COUNTRY")
@SequenceGenerator(name = "seq_country",sequenceName = "SEQ_COUNTRY",allocationSize = 1)
public class Country {

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "seq_country")
    private Long id;

    @Column(name = "SHORT_NAME")
    private String shortName;

    @Column(name = "NAME")
    private String name;

    @OnetoMany(mappedBy = "country",fetch = FetchType.EAGER,cascade = CascadeType.ALL)
    private List<Address> addresses;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getShortName() {
        return shortName;
    }

    public void setShortName(String shortName) {
        this.shortName = shortName;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Address> getAddresses() {
        return addresses;
    }

    public void setAddresses(List<Address> addresses) {
        this.addresses = addresses;
    }

@Entity
@Table(name = "ADDRESS")
@SequenceGenerator(name = "seq_address",sequenceName = "SEQ_ADDRESS",allocationSize = 1)
public class Address {

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "seq_address")
    private Long id;

    @Column(name = "ADDRESS")
    private String address;

    @Column(name = "POSTAL_CODE")
    private String postalCode;

    @Column(name = "CITY")
    private String city;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "COUNTRY_ID")
    private Country country;

    @OnetoOne(mappedBy = "address")
    private Issuer issuer;

    public Long getId() {

        return id;
    }

    public void setId(Long id) {

        this.id = id;
    }

    public String getAddress() {

        return address;
    }

    public void setAddress(String address) {

        this.address = address;
    }

    public String getPostalCode() {

        return postalCode;
    }

    public void setPostalCode(String postalCode) {

        this.postalCode = postalCode;
    }

    public String getCity() {

        return city;
    }

    public void setCity(String city) {

        this.city = city;
    }

    public Country getCountry() {
        return country;
    }

    public void setCountry(Country country) {
        this.country = country;
    }

    public Issuer getIssuer() {
        return issuer;
    }

    public void setIssuer(Issuer issuer) {
        this.issuer = issuer;
    }

@Entity
@Table(name = "ISSUER")
@SequenceGenerator(name = "seq_issuer",sequenceName = "SEQ_ISSUER",allocationSize = 1)
public class Issuer {

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "seq_issuer")
    private Long id;

    @Column(name = "NAME")
    private String name;

    @OnetoOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "ADDRESS_ID")
    private Address address;

    @Column(name = "MAIL_ADDRESS")
    private String emailAddress;

    @Column(name = "COMPANY_CONTACT_REF")
    private String contactPerson;

    @Column(name = "OTHER_CONTACT_REF")
    private String otherContactPerson;

    @OnetoMany(mappedBy = "issuer",cascade = CascadeType.ALL)
    private Collection<Asset> assets;

    public Long getId() {

        return id;
    }

    public void setId(Long id) {

        this.id = id;
    }

    public String getName() {

        return name;
    }

    public void setName(String name) {

        this.name = name;
    }

    public String getEmailAddress() {

        return emailAddress;
    }

    public void setEmailAddress(String emailAddress) {

        this.emailAddress = emailAddress;
    }

    public String getContactPerson() {

        return contactPerson;
    }

    public void setContactPerson(String contactPerson) {

        this.contactPerson = contactPerson;
    }

    public String getotherContactPerson() {

        return otherContactPerson;
    }

    public void setotherContactPerson(String otherContactPerson) {

        this.otherContactPerson = otherContactPerson;
    }

    public Collection<Asset> getAssets() {

        return assets;
    }

    public void setAssets(Collection<Asset> assets) {

        this.assets = assets;
    }

    public Address getAddress() {

        return address;
    }

    public void setAddress(Address address) {

        this.address = address;
    }
}

如果有人遇到相同的问题,或者在这里看到可怕的东西,请不要犹豫!

谢谢斯蒂芬妮

解决方法

首先,您在ADDRESS表中没有列名COUNTRY_ID,但您仍在尝试使用此列创建外键

    <addForeignKeyConstraint baseTableName="ADDRESS" baseColumnNames="COUNTRY_ID"
                             constraintName="FK_ADDRESS_TO_COUNTRY" 
    referencedTableName="COUNTRY"
                             referencedColumnNames="ID"/>

将基本列名称从COUNTRY_ID更改为ID