私は2つのオブジェクトを持っています。会社と従業員にしましょう。それから私は、すべての従業員を持つ企業を削除したいHibernateで相互に関連するオブジェクトを削除する方法
class Employee {
long id;
String name;
Company company;
}
class Company{
long id;
String name;
Employee chief;
}
:
CREATE TABLE company (
company_id BIGINT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
chief_id BIGINT(20) NOT NULL,
PRIMARY KEY (company_id),
CONSTRAINT fk_company_chief
FOREIGN KEY (chief_id)
REFERENCES employee (employee_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
CREATE TABLE employee(
employee_id BIGINT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
company_id BIGINT(20) NOT NULL,
PRIMARY KEY (employee_id),
CONSTRAINT fk_employee_company
FOREIGN KEY (chief_id)
REFERENCES employee (company_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
そして、私のクラスは次のようになり。私は1回の取引でそれを行います。私のようなものが得られる"java.sql.BatchUpdateException: Column 'chief_id' cannot be null"
カラムの1つをヌル可能にした後でしか削除できません。例えば "chief_id BIGINT(20)NULL"のようにしてから、削除する前にcompany.chief = nullにします。
私たちはHibernateカスケードを使用せず、データベースカスケードを変更することはできません。
MySql 5.0を使用しています。
私は、以下のようにsmthが必要です:disable constraints-> remove entity-> enable constraints。無効状態は、現在のトランザクション内でのみアクセス可能である必要があります。私はそれがデフォルトの動作だと思った。
ここでJPAアノテーションを指定していないのですが、その関係は何ですか?*(Company - Employee)、POJOのIDを超えて定義されたアノテーションに対してnullable = trueを追加できますか? – Narayan