0

私はこの状況に対する正しい解決策は何であるか疑問に思っています。メソッドはトランザクションで実行されています。このメソッドの最初の行を削除すると、デタッチされたエンティティが永続化例外に渡されます。私は問題を理解しています。会社は永続性のコンテキストにありません。以下のコードが唯一の解決策ですか?それはより良い方法ですか?

@Override
public void delete(Company company) {
    company = companyDao.get(company.getId(), CompanyLoadParameter.LOAD_LANGUAGES);
    companyDao.delete(company);
}
4

2 に答える 2

1
Session#createQuery("DELETE FROM " + Company.class.getName() +
    " WHERE " + Company.K_id "=?")
    .addParameter(0, CompanyLoadParameter.LOAD_LANGUAGES)
    .executeUpdate();

ここで、Company.K_idは、主キーのJavaプロパティ名(文字列として)です。

public static final String K_id = "id";

HQLは標準のIDEツールを使用してリファクタリングでき、おそらくその後も作業を続行できるため、私はこの方法で作業を行います。

HQLのURLhttps ://docs.jboss.org/hibernate/orm/3.5/reference/en/html/queryhql.html

于 2012-09-20T11:44:11.783 に答える
0

はい、これは単一のエンティティを削除する正しい方法です。私の情報として、これ以上の方法はありません。

熱心なフェッチに問題がある場合は、JPAエンティティの構成を再考する必要があります。


他の方法はHQLDELETEクエリを使用することですが、これには問題があります。削除操作は、関連するコレクションにカスケードされません。それは危険で醜いです。

JPA 2.1では、一括DELETEクエリについては言及されていますが、DELETEクエリを使用した単一エンティティの削除については何も言及されていません。理由があるに違いないと思います。

于 2012-09-20T11:56:54.310 に答える