HSQLDB + Hibernate を使用して、開発中のアプリケーションの単体テストを実行しています。他のエンティティとの 3 つの OneToOne 関係を持つエンティティを永続化するテストがあります。MySql を使用してテストを実行すると、エラーは発生せず、テストはパスしますが、HSQLDB に対して同じテストを実行すると、java.sql.SQLException: Integrity constraint violation - no parent FK_...が FK_ の 1 つであるというエラーが発生します。 Person クラスの関係で定義された外部キー。
私のコードは次のとおりです。
@Entity
@Table(name = "PERSON")
public class Person {
private static final long serialVersionUID = 1L;
private Long oid;
private Address commercialAddress;
private Address homeAddress;
private Settings settings;
@Id
@GeneratedValue
@Column(name = "OID")
public Long getOID() {
return this.oid;
}
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "COMPANY_ADDRESS_OID", nullable = false)
@ForeignKey(name = "FK_PERSON__COMPANY_ADDRESS")
public Address getCommercialAddress() {
return this.commercialAddress;
}
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "HOME_ADDRESS_OID", nullable = false)
@ForeignKey(name = "FK_PERSON__HOME_ADDRESS")
public Address getHomeAddress() {
return this.homeAddress;
}
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "SETTINGS_OID", nullable = false)
@ForeignKey(name = "FK_PERSON__SETTINGS")
public Settings getSettings() {
return this.settings;
}
}
Address クラスと Settings クラスには関係がなく、単純な休止状態のエンティティです。
@Entity
@Table(name = "ADDRESS")
public class Address {
private Long oid;
private String city;
private String country;
private String province;
private String postalCode;
private String street;
@Id
@GeneratedValue
@Column(name = "OID")
public Long getOID() {
return this.oid;
}
...
}
@Entity
@Table(name = "Settings")
public class Settings {
private Long oid;
private String backgroundColor;
private String fontName;
private Integer fontSize;
private String themeName;
@Id
@GeneratedValue
@Column(name = "OID")
public Long getOID() {
return this.oid;
}
...
}
Google を使用していくつかの検索を実行しましたが、有用なものが見つかりませんでした。誰かが私を正しい方向に向けてくれることを願っています。前もって感謝します。