使用休眠读取 URL 地址的冒号

Read colons for an URL adress with hibernate

嗯,我知道有很多关于这个问题的资料,但我找不到具体的资料来帮助我解决我的问题。或者,至少,我还没有弄清楚:/.

我的问题如下:我有一个包含产品的数据库,每个产品都有一个图像字段,对应于该图像的 URL。

然后,当我想进行查询以获取以 'http://' 或 'https://' 开头的 url 图像时,由于休眠行为,我遇到了典型的冒号问题。

最重要的是 ubuntu 和 mac 如果该前缀不存在则不会出现问题...但是 windows 会出现问题。

那是我的问题...如果有办法解决冒号问题,或者避免 windows 上的前缀以便它可以加载图像,我将成为地球上最幸福的人。很抱歉,但我真的不知道该怎么做才能解决这个问题,或者是否有其他方法可以让我不处理这个特定问题。

提前感谢您的宝贵时间,各位! :)

我正在做一个本地查询:

[UPDATE products SET products.title = 'On Cloudsurfer 运行 Women\'s Shoes Size 5.5', products.brand = 'On Running', products.urlImage = '<a href="http://ecx.images-amazon.com/images/I/31NpvJwpEYL._SL75_.jpg" rel="nofollow">http://ecx.images-amazon.com/images/I/31NpvJwpEYL.<em>SL75</em>.jpg</a> ', products.weight = 1.85, products.width = 7.8, products.height = 4.2, products.length = 10.9, products.amazonSize = '5.5 B(M) 女性\'s US' 哪里 products.sku='0000027001WM-SZ-5.5';]

我的问题是冒号...在 ubuntu 和 mac 上,前缀不是问题,但似乎 windows 一直需要它,因为图像没有显示在 windows.

勘误表:对不起大家!请忘记只有 windows 不显示图片这一事实。系统很大,忘了把“:”补上了“\”。这就是 ubuntu 和 mac 显示图像但 windows 不显示图像的原因...

无论如何,冒号问题仍然是个问题:(

有时持久对象可能包含带有 %、_、! 等字符的字段。如果使用 Hibernate 的条件查询进行过滤,就会出现一个问题。

使用此代码片段作为参考:

public class EscapedRestrictions {
    public static Criterion ilike(String propertyName, String value) {
        return new EscapedILikeExpression(propertyName, value);
    }

    public static Criterion ilike(String propertyName, String value, MatchMode matchMode) {
        return new EscapedILikeExpression(propertyName, value, matchMode);
    }
}

class EscapedILikeExpression extends IlikeExpression {
    private static final String HIBERNATE_ESCAPE_CHAR = "\";

    public EscapedILikeExpression(String propertyName, Object value) {
        super(propertyName, value);
    }

    public EscapedILikeExpression(String propertyName, String value, MatchMode matchMode) {
        super(propertyName, replaceAll(value), matchMode);
    }

    private static String replaceAll(String value) {
        return value
                .replace("\",  HIBERNATE_ESCAPE_CHAR + "\")
                .replace("_",   HIBERNATE_ESCAPE_CHAR + "_")
                .replace("%",   HIBERNATE_ESCAPE_CHAR + "%");

    }
}

用法与上面的代码片段相同,只是将 Restrictions class 替换为 EscapedRestrictions。