问题描述
定义某些外键确实有问题。 我有一个发行人,有一个地址。 我有一个国家/地区的地址。
我正在尝试使用这些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