1

Liferay を使用してカスタム ポートレットを開発しています。カスタム クエリを使用して、複数のテーブルから結合などでデータを取得したいと考えています。

私の問題をグーグルで検索しましたが、段階的な手順を理解する簡単な方法が見つかりません。

したがって、カスタムポートレット用のカスタムSQLクエリを作成するためのガイドやチュートリアルを提供してくれる人がいる場合。

この4番目のステップの後、Eclipseでサービスを構築し、正常に表示されました.service/persistenceパッケージに名前で作成された2つのファイルがありAdvertiseFinder.javaますAdvertiseFinderUtil.javaが、メソッドにアクセスしようとするgetAd_DisplayforReportsと、advertiseFinderUtil.getAd_DisplayforReports("Any arguement with string") そのようなメソッドがないというエラーが表示されますAdvertiseFinderUtil

AdvertiseFinderImpl メソッドを更新した後、サービスをビルドしましたが、機能しません

これは私のAdvertiseFinderImplクラスです

package emenu.advertise.database.service.persistence;

import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;

import emenu.advertise.database.model.ad_display;
import emenu.advertise.database.model.advertise;
import emenu.advertise.database.model.impl.ad_displayImpl;

import java.util.List;


import com.liferay.portal.SystemException;
import com.liferay.portal.kernel.dao.orm.QueryPos;
import com.liferay.portal.kernel.dao.orm.SQLQuery;
import com.liferay.portal.kernel.dao.orm.Session;
import com.liferay.util.dao.orm.CustomSQLUtil;

public class AdvertiseFinderImpl  extends BasePersistenceImpl<ad_display> implements advertiseFinder{

    public void getall() {
    }

    // the name of the query
        public static String GET_ADVERTISE = AdvertiseFinderImpl.class.getName()
                + ".getAdvertise";

        // the method which will be called from the ServiceImpl class
        public List<ad_display> getAd_DisplayforReports(String pattern) throws SystemException {

            Session session = null;
            try {
                // open a new hibernate session
                session = openSession();

                // pull out our query from book.xml, created earlier
                String sql = CustomSQLUtil.get(GET_ADVERTISE);

                // create a SQLQuery object
                SQLQuery q = session.createSQLQuery(sql);

                // replace the "Book" in the query string with the fully qualified java class
                // this has to be the hibernate table name
                q.addEntity("a_ad_display", ad_displayImpl.class);


                // Get query position instance
                QueryPos qPos = QueryPos.getInstance(q);

                // fill in the "?" value of the custom query
                // this is same like forming a prepared statement
                qPos.add(pattern);

                // execute the query and return a list from the db
                return (List<ad_display>)q.list();

                /*
                 // use this block if you want to return the no. of rows (count)

                 int rows = 0;

                 Iterator<Long> itr = q.list().iterator();

                 if (itr.hasNext()) { Long count = itr.next();

                 if (count != null) { rows = count.intValue(); } }

                 return rows;
                 */
            } catch (Exception e) {
                throw new SystemException(e);
            } finally {
                closeSession(session);
            }
        }

}

私のdefault-ext.xmlは次のとおりです

<?xml version="1.0"?>

<custom-sql>
<sql file="custom-sql/emenu.xml" />
</custom-sql>

私のemenu.xmlはここにあります

<custom-sql>
    <sql id="emenu.advertise.database.service.persistence.AdvertiseFinderImpl.getAd_DisplayforReports">
      <![CDATA[
            SELECT
                    *
            FROM
                a_ad_display
        ]]>
    </sql>
</custom-sql>
4

2 に答える 2

1

変化する

return (List<ad_display>)q.list();

return (List<ad_display>) QueryUtil.list(q, getDialect(), -1, -1);
于 2013-07-12T15:42:03.610 に答える