gpt4 book ai didi

java - 在 java.net.URL 类型对象上执行条件查询的可能性和限制

转载 作者:行者123 更新时间:2023-11-30 04:56:47 25 4
gpt4 key购买 nike

我有一个数据库表,用于存储 URL(例如http://google.com)。与表对应的实体有一个 URL 类型字段,因此我创建了一个如下所示的条件查询:

CriteriaBuilder cb = ...
Path<URL> path = ...
cb.equal(path , new URL("http://google.com"));

这按预期工作,但是我希望能够做这样的事情:

cb.like(path.<String>get("externalForm"), "%google%");

显然 URL 没有 externalForm 字段,但有一个 toExternalForm() 方法。

这种查询可以通过 API 实现吗?如果是:怎么办?或者我最好的选择是将 URL 列映射到字符串而不是 URL?

最佳答案

不可以,您不能在 Criteria 查询中调用持久值的方法。 JPQL 也有同样的限制。最后,这两者都转换为 SQL 查询,并且在任意 Java 对象中调用方法不太适合。

此外,在您的情况下,我们尝试通过字段或方法访问它并不重要。原因是 java.net.URL 中的字段与实体中映射的持久属性不同。 URL 字段不会直接持久化(因此您无法在 SQL 中查询它们),可序列化对象只是通过序列化为字节数组或类似的方式来持久化。

此外,在 java.net.URL 中调用 equals 可能会导致意外:java.net.url Javadoc

只需使用 String 作为类型,并注意数据库中的字段对于长得惊人的 url 来说也足够长。

关于java - 在 java.net.URL 类型对象上执行条件查询的可能性和限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8296904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com