JPAの修正操作

4149 ワード

JPAの修正操作JPAの修正には、いくつかの方法があります.ここでは、setメソッド2を呼び出すと、JPAQL文修正3 SQL文修正4 JPA標準クエリーの下で、プロジェクトコードを例に4つの修正方法を詳しく説明します.setメソッドを呼び出す.JPAは、JPAQL、エンティティーマネージャのプライマリ・キー・クエリー、JPA標準クエリーの3つの方法で得られるjavaオブジェクトをエンティティーと呼びます.トランザクションマネージャのトランザクション範囲内のエンティティは、永続的なエンティティです.JPAは永続エンティティのsetメソッドをエージェントします.setメソッドを呼び出すと、トランザクションのコミット時に、エンティティクラス全体のすべてのフィールドの変更がSQL update文を生成し、データベース実行に送信されます.プロジェクトコード例:エンタープライズ購買依頼第2ステップコアビジネスコード
@Override
public void update2(CompanyApplyFormV2 form) {
   //             
   CompanyApply ca= easyDao.get(form.getId(), CompanyApply.class);
   ca.setAddress(form.getAddress());
   ca.setBuildDate(form.getBuildDate());
   ca.setEconomicType(form.getEconomicType());
   ca.setInstitutionCode(form.getInstitutionCode());
   ca.setLegalEntity(ThreeDes.encryptMode(form.getLegalEntity()));
   ca.setName(form.getName());
   ca.setRegisteredCapital(form.getRegisteredCapital());
   ca.setRegistrationNumber(form.getRegistrationNumber());
}

コードの中では永続的なエンティティにクエリーして、setメソッドを呼び出して2 JPAQL文を修正します.setメソッドを変更します.setメソッドを変更します.コードを書くのは気持ちがいいですが、実際に生成されたSQL文はupdateのすべてのデータベースフィールドで、パフォーマンスのオーバーヘッドが大きいです.パフォーマンスに対する要求が高い場合は、使用を推奨しません.JPAQL文は、SQL文とは構文が異なります.文のフィールドは、データベースフィールドではなくエンティティークラスフィールドです.プロジェクトインスタンス:コールバック関数ブロッカーによる受注ステータスの変更
private int updateOrderStatus(long id, OrderStatus status){
    String jpql = "UPDATE "+ThirdPartyOrder.class.getName()+" o set o.orderStatus=:status where o.id =:id and o.trash = false";
    Query query = em.createQuery(jpql);
    query.setParameter("status",status).setParameter("id",id);
    return query.executeUpdate();
}

テーブル名の代わりにクラス名、javaクラスフィールド名の代わりにデータベースフィールド名が表示されます.3 SQL文修正SQL文修正プロジェクトでは使用されませんでした.その書き方は簡単です.JPAQL文の変更とは異なり、EntityManagerのcreateNativeQueryメソッドが呼び出されます.4つの標準クエリーは、標準クエリーに対して変更されます.注意が必要なのはROOTオブジェクトで、文字通りルートを意味しますが、実際にはRootオブジェクトはテーブルに相当します.Rootオブジェクトのgetメソッドは、エンティティークラスフィールドを取得します.setもwhereも必要です.プロジェクトには実際のコードはありませんが、demo comがあります.cloud.ptp.modern.TestResource.
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaUpdate update = cb.createCriteriaUpdate(User.class);
Root root = update.from(User.class);
javax.persistence.criteria.Path email = root.get("email");
update.set(email, RandomStringUtils.randomAlphanumeric(5)+"@qq.com");
update.where(cb.equal(root.get("username"),"yujianbo"));
Query q = em.createQuery(update);
return "Updated "+ q.executeUpdate()+ " rows.";