質問

についての相互作用Hibernate:

  1. はいつ使ったらよいでしopenSessionはgetCurrentSession(jtaは、スレッドではなく)?
  2. どんなミックスセッション業務の振GUI?はい、次のようなコードは、JavaBeanのですか。

    public void actionPerformed(ActionEvent event) {
        // session code
    }
    
  3. を追加できますか方法は私の主体を含むHQLクエリはこの悪い習?例えば:

     // This method is in an entity MyOtherEntity.java class
     public int getDuration(){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        int sum = (Integer) session.createQuery("select sum(e.duration) as duration from MyEntity as e where e.myOtherEntity.id=:id group by e.name").
            .setLong("id", getId());
            .uniqueResult();
        return sum;
     }
    

する方法を教えてくださいこれによって豊かにも細かい上品な。

更新 広く使用されている実践であるが、サービス/daoのクラスを編運営の主体クラスです。なぜこいいですか?なんとしていただいて構いません、クラス毎に自主管理のですか?この実質有利ですか。

更新2 サービスクラスは、DAOのパターン?これはどういう意味ですか?アーサー-ドナルドF D-ガルシアのリポジトリの例 は、DAOのパターンは、このように、いわゆる"サービスレイヤー?

役に立ちましたか?

解決

したい場合 な平野Hibernate API 利用できるサービスの層が

  • で使用の場合駆動
  • 境界を定取引の境界

部として購入することができます、AccountService、インスタンスのように、

public static path.to.HibernateUtil.getSessionFactory;

public class AccountService {

    public void withdraw(Integer accountNumber, BigDecimal amount) throws Exception {
        /**
          * Here you set up Transaction boundaries
          */
        getSessionFactory().getCurrentSession().beginTransaction();

        // Some actions goes here

        getSessionFactory().getCurrentSession().getTransaction().commit();
    }

}

する必要があり、リポジトリが特定のアクション内にサービス。ようなものと考えることができるリポジトリ データ提供者"とい及び保管. こちらの きかを実施マリポジトリ

したい場合 a維持可読HQLクエリ, 私は、決まり集団間に差おHQLクエリにmultlineおよび外部化xmlファイル

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <query name="GIFT_CARDS_WITH_BUYER">
        <![CDATA[
            from 
                GiftCard c
            left join fetch 
                c.buyer
            where
                c.recipientNotificationRequested = 1
       ]]>
    </query>
    <query name="GIFT_CARDS_WITHOUT_NO_RELATIONSHIP">
        <![CDATA[
            from 
                GiftCard
        ]]>
    </query>
</hibernate-mapping>

なお振GUIイベントは終了いたしました。電話サービス層のように

public void actionPerformed(ActionEvent event) {
    // Some related Swing GUI actions goes here (retrieve User input, validate data and so on...)

    accountService.withdraw(accountNumber, new BigDecimal(amount));
}

で使うようにするといいでしょう持続行動の中に存在となる。が必要な場合は永続化関連の問題の身体が賢明ではないかと思いますパスポートとしてパラメータを実体

public class Account {

   public void doSomething(AccountRepository repository) {
       // code goes here
   }

}

ものを見たい この スレッド

私の助言を見Java PersistenceとHibernate書第9章(オブジェクト). 武器貿易条約:をよくお読み

更新

なぜ良いサービスの層?

まず

  • で使用の場合駆動(地で行うアプリをすべき)

第二の

  • で境界を定取引の境界

仮にこれをサービス層

public class MyService {

    public void doSomething() {
        getSessionFactory().beginTransaction();

        // A POJO doing some operation

        // Other POJO doing other operation

        // Another POJO doing another operation

        getSessionFactory().getTransaction().commit();
    }

}

つまらないものになってしまう定義し取引の境界を定義"するのではなく、各内部の各POJO.以上はどうなるのかどうかのビジネスルール内にイングGUIでご利用いただく必要があり内部の部品です。のご利用となりましCtrl-c+Ctrl-v???

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top