如何在Hibernate查询语言(HQL)中执行左联接

时间:2018-11-02 10:45:30

标签: java spring hibernate spring-mvc hibernate-mapping

需要从两个表中检索记录

表1: KFT_M_CUSTOMER_CART_LIST

表2: KFT_STATIC_DETAILS

我尝试了这个 SQL 查询,该查询在SQLserver中正常工作

但此查询在 HQL

中不起作用

如何在HQL查询中编写

public class ProductCatalogAdapter extends CursorAdapter {

    private final String attrToDisplay;
    private final DisplayImageOptions options;
    private OrderingMainCallback callback;
    private LayoutInflater inflater;
    MyPreferences preferences;
    private ImageLoader imageLoader;

    public ProductCatalogAdapter(OrderingMainCallback callback, Context context, Cursor c, boolean autoRequery) {
        super(context, c, autoRequery);
        this.callback = callback;
        inflater = LayoutInflater.from(context);
        preferences = new MyPreferences(context);
        this.imageLoader = ImageLoader.getInstance();
        File cacheDir = new File(preferences.getCacheDir());
        if (!cacheDir.exists())
            cacheDir.mkdirs();
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).memoryCacheExtraOptions(100, 100)
                .discCacheExtraOptions(1000, 1000, Bitmap.CompressFormat.JPEG, 100, null).discCache(new UnlimitedDiscCache(cacheDir)).build();
        imageLoader.init(config);
        imageLoader.handleSlowNetwork(true);
        attrToDisplay = preferences.getPreferencesValue(MyPreferences.pref_attribute_to_display);
        options = new DisplayImageOptions.Builder().resetViewBeforeLoading(true).displayer(new SimpleBitmapDisplayer()).cacheOnDisc(true)
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
                .showImageOnLoading(R.drawable.loading_image)
//                .showImageForEmptyUri(R.drawable.no_image)
                .build();
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        View retView;
        ViewHolder holder = new ViewHolder();
        retView = inflater.inflate(R.layout.catalog_listview_adapter, parent, false);
        holder.title = retView.findViewById(R.id.gridViewImageTitle);
        holder.itemImage = retView.findViewById(R.id.gridViewImage);
        holder.productNameTxt = retView.findViewById(R.id.gridCatalogProducttNametextView);
        holder.prodNameIdx = cursor.getColumnIndex(attrToDisplay);
        holder.prodIdIdx = cursor.getColumnIndex("_id");
        holder.prodImgNameIdx = cursor.getColumnIndex("prod_img_name");
        retView.setTag(holder);
        return retView;
    }

    @Override
    public void bindView(View view, Context context, final Cursor cursor) {
        final ViewHolder holder = (ViewHolder) view.getTag();


        holder.productNameTxt.setText(cursor.getString(holder.prodNameIdx));
        holder.productNameTxt.setVisibility(View.INVISIBLE);
        holder.title.setText(cursor.getString(holder.prodNameIdx));
        String urlLink = cursor.getString(holder.prodImgNameIdx);
//        holder.itemImage.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                if (preferences.isFastScanningMode()) {
//                    callback.addProduct(cursor.getString(holder.prodIdIdx));
//                }
//            }
//        });
        imageLoader.displayImage(urlLink, holder.itemImage, options, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String s, View view) {
                if (TextUtils.isEmpty(s)) {
                    holder.productNameTxt.setVisibility(View.VISIBLE);
                    holder.itemImage.setVisibility(View.GONE);

                }else {
                    holder.productNameTxt.setVisibility(View.INVISIBLE);
                    holder.itemImage.setVisibility(View.VISIBLE);
                }
            }

            @Override
            public void onLoadingFailed(String s, View view, FailReason failReason) {
                holder.productNameTxt.setVisibility(View.VISIBLE);
                holder.itemImage.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingComplete(String s, View view, Bitmap bitmap) {
                if (TextUtils.isEmpty(s)) {
                    holder.productNameTxt.setVisibility(View.VISIBLE);
                    holder.itemImage.setVisibility(View.GONE);

                }else {
                    holder.productNameTxt.setVisibility(View.INVISIBLE);
                    holder.itemImage.setVisibility(View.VISIBLE);
                }
            }

            @Override
            public void onLoadingCancelled(String s, View view) {

            }
        });
        if(TextUtils.isEmpty(urlLink)){

        }
    }

    public class ViewHolder {
        CustomSquareLayout customSquareLayout;
        TextView title, productNameTxt;
        ImageView itemImage;
        int prodNameIdx;
        public int prodIdIdx;
        int prodImgNameIdx;
    }
}

实体class1:KftStaticDetail

SELECT      isnull(S1.VALUE,'') AS PRINT_MEDIUM , 
            isnull(S2.VALUE,'') AS PRINT_QUALITY , 
            isnull(S3.VALUE,'') AS PRINT_SIZE,
            isnull(S4.VALUE,'') AS NO_OF_PRINTS

            from KFT_M_CUSTOMER_CART_LIST M

            LEFT JOIN [KFT_STATIC_DETAILS] S1 ON S1.MASTER_ID=100 AND S1.DETAIL_ID=M.PRINT_MEDIUM
            LEFT JOIN [KFT_STATIC_DETAILS] S2 ON S2.MASTER_ID=200 AND S2.DETAIL_ID=M.PRINT_QUALITY
            LEFT JOIN [KFT_STATIC_DETAILS] S3 ON S3.MASTER_ID=300 AND S3.DETAIL_ID=M.PRINT_SIZE
            LEFT JOIN [KFT_STATIC_DETAILS] S4 ON S4.MASTER_ID=500 AND S4.DETAIL_ID=M.NO_OF_PRINTS

实体类2:KftCartItem

    @Column(name="MASTER_ID")   
int masterId;

@Id
@Column(name="DETAIL_ID")
int detailId;

@Column(name="VALUE")
String value;

@Column(name="DESCRIPTION")
String description;

@Column(name="ACTIVE")
String active;

0 个答案:

没有答案