简体   繁体   English

将JPA Integer转换为String以进行MySQL查询

[英]JPA Integer conversion to String for MySQL query

I have to write a JPA query to select data in a MySQL DB. 我必须编写一个JPA查询以选择MySQL数据库中的数据。

I have this part of code: 我有这部分代码:

SELECT NEW com.fiat.sc.um.mdm.bean.Vendor
(e.fgpVndrNumber, e.companyName1, e.vndrCountry, 
e.city, e.postalCode, e.street, e.vatRegistrNum, 
e.vendorTypeDesc, e.companyName2, e.taxNumber2, 
e.taxNumber1, e.organizationCode) 
FROM ScVendor e 

I want to add this where clause: 我想添加以下where子句:

WHERE str(e.fgpVndrNumber) LIKE '%123%' 

or 要么

to_char(e.fgpVndrNumber) LIKE '%123%'

In few words, I have to convert an Integer in String. 简而言之,我必须将String转换为Integer。

But I obtain an error. 但是我得到一个错误。

Suggestions? 有什么建议吗?

EDIT 编辑

This is the complete Java code: 这是完整的Java代码:

String selAndForm = "SELECT NEW com.fiat.sc.um.mdm.bean.Vendor(e.fgpVndrNumber, e.companyName1, e.vndrCountry,"
                + " e.city, e.postalCode, e.street, e.vatRegistrNum, e.vendorTypeDesc, e.companyName2, e.taxNumber2, "
                + "e.taxNumber1, e.organizationCode)  FROM ScVendor e ";

        String where = null;

        if (isNotNull(companyName)) {
            if (searchCriteriaCompName != null) {
                if (searchCriteriaCompName.equals("contains")) {
                    companyName = "%" + companyName + "%";
                }
                if (searchCriteriaCompName.equals("startWith")) {
                    companyName = companyName + "%";
                }
                if (searchCriteriaCompName.equals("endWith")) {
                    companyName = "%" + companyName;
                }
            }

            if (where == null) {
                where = "WHERE lower(e.companyName1) like '" + companyName.toLowerCase() + "'";
            } else {
                where = where + " AND lower(e.companyName1) like '" + companyName.toLowerCase() + "'";
            }
        }

        if (isNotNull(immediateParent)) {
            if (searchCriteriaParentCode != null) {
                if (searchCriteriaParentCode.equals("contains")) {
                    immediateParent = "%" + immediateParent + "%";
                }
                if (searchCriteriaParentCode.equals("startWith")) {
                    immediateParent = immediateParent + "%";
                }
                if (searchCriteriaParentCode.equals("endWith")) {
                    immediateParent = "%" + immediateParent;
                }
                if (searchCriteriaParentCode.equals("equals")) {
                    // do nothing
                }
            }

            if (where == null) {
                where = "WHERE e.immediateParent LIKE '" + immediateParent + "'";
            } else {
                where = where + " AND e.immediateParent LIKE '" + immediateParent + "'";
            }
        }


        if (isNotNull(supplierCode)) {

            logger.debugT("supplierCode=" + supplierCode);

            if (searchCriteriaParentCode != null) {
                if (searchCriteriaSuppCode.equals("contains")) {
                    supplierCode = "%" + supplierCode + "%";
                }
                if (searchCriteriaSuppCode.equals("startWith")) {
                    supplierCode = supplierCode + "%";
                }
                if (searchCriteriaSuppCode.equals("endWith")) {
                    supplierCode = "%" + supplierCode;
                }
                if (searchCriteriaSuppCode.equals("equals")) {
                    // do nothing
                }
            }

            if (where == null) {
                where = "WHERE e.fgpVndrNumber.toString() like '" + supplierCode + "'";
            } else {
                where = where + " AND e.fgpVndrNumber.toString() like '" + supplierCode + "'";
            }
        }


        StringBuffer SQL = new StringBuffer();

        SQL.append(selAndForm);
        SQL.append(where);
        SQL.append(" AND e.deletedAt IS NULL");

        logger.debugT(SQL.toString());
        Query query = eManager.createQuery(SQL.toString());

fgpVendorNumber is an Integer. fgpVendorNumber是一个整数。 I want to convert it in a String. 我想将其转换为字符串。

No explicit casting is required to search part of the number. 搜索部分号码不需要显式转换。

Following query format should be working with no syntax or logical errors. 以下查询格式应该没有语法或逻辑错误。

select ...
  from ...
 where e.fgpVndrNumber like '%123%'

Use cast function in MySql Databases. 在MySql数据库中使用强制转换功能。

WHERE cast(e.fgpVndrNumber as varchar) LIKE '%123%'

See also 也可以看看

MySql Cast MySql演员

Trying to compare an Integer against a String in JPA JPQL would cause an error. 尝试将整数与JPA JPQL中的字符串进行比较会导致错误。
I was able to convert the Integer into a String that could be compared doing this: 我能够将Integer转换成可以进行比较的String:

WHERE substring(xInteger, 0) like '%stringFilter%'

我可以在我的JPA查询中使用TRIM:

WHERE TRIM(e.fgpVndrNumber as varchar) LIKE '%123%'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM