小编Pav*_*vlo的帖子

Hibernate 将 POJO 对象作为参数传递,并使用它的属性。是否可以?

我尝试将 POJO 作为 hibernate 参数传递,但它因异常而崩溃,我实际上不明白。我试图找出原因,但没有得到任何明确的结果。在where条件下是否可以使用POJO字段?

这里查询及其参数说明:

@Query("select jc "
        + "from JobChron jc "
        + "where "
        + "jc.state=:catalogPage.state and "
        + "jc.city=:catalogPage.city and "
        + "jc.vertical=:catalogPage.vertical "
        )
LinkedList<JobChron> selectOpen(
        @Param("catalogPage") CatalogPage catalogPage);
Run Code Online (Sandbox Code Playgroud)

我看到的根本异常是:

Caused by: java.lang.NullPointerException
    at org.hibernate.hql.internal.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:598)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4980)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1263)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4686)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4159)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2104)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2029)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2029)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:796)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:597)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:131)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:93)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836) …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate

3
推荐指数
1
解决办法
4542
查看次数

如何使用Java从相对URL构建绝对URL?

我有一个相对的url字符串,知道主机和协议.如何构建绝对url字符串?

好像很容易?是的,一开始看,但直到逃脱的角色来.我必须从302代码http(s)响应位置标头构建绝对URL.

让我们考虑一个例子

protocol: http
host: example.com
location: /path/path?param1=param1Data&param2= " 
Run Code Online (Sandbox Code Playgroud)

首先,我尝试构建url字符串,如:

Sting urlString = protocol+host+location
Run Code Online (Sandbox Code Playgroud)

URL类的构造函数不会转义空格和双引号:

new URL(urlString)
Run Code Online (Sandbox Code Playgroud)

URI类的构造函数失败,但异常:

new URI(urlString)
Run Code Online (Sandbox Code Playgroud)

URI.resolve 方法也失败,异常

然后我发现URI可以在查询字符串中转义params,但只有很少的构造函数,例如:

URI uri = new URI("http", "example.com", 
    "/path/path", "param1=param1Data&param2= \"", null);
Run Code Online (Sandbox Code Playgroud)

这个构造函数需要路径和查询是一个单独的参数,但我有一个相对的URL,它不会被路径和查询部分拆分.

我可以考虑检查相对URL是否包含"?" 问题标志,并认为它之前的一切都是路径,并且它之后的一切都是查询,但如果相对网址不包含路径,但只查询,并且查询包含"?",该怎么办?标志?然后这将无效,因为部分查询将被视为路径.

现在我无法从相对URL建立绝对URL.

这些接受的答案似乎错了:

考虑到相对于url与主机和某个路径部分相关的url时的情况可能会很好:

最初的网址http://example.com/...some路径...相对/home?...query here ...

获得java核心解决方案会很棒,尽管它仍然可以使用一个好的lib.

java url http

2
推荐指数
1
解决办法
380
查看次数

Spring Boot WebClient.Builder bean在传统servlet多线程应用程序中的用法

我想有一个http客户端从Spring Boot 不响应的应用程序调用其他微服务。由于将不使用RestTemplate,因此我尝试使用WebClient.Builder和WebClient。虽然我不确定线程​​安全性。这里的例子:

@Service
public class MyService{
    @Autowired
    WebClient.Builder webClientBuilder;

    public VenueDTO serviceMethod(){
        //!!! This is not thread safe !!!
        WebClient webClient = webClientBuilder.baseUrl("http://localhost:8000").build();

        VenueDTO venueDTO = webClient.get().uri("/api/venue/{id}", bodDTO.getBusinessOutletId()).
                retrieve().bodyToMono(VenueDTO.class).
                blockOptional(Duration.ofMillis(1000)).
                orElseThrow(() -> new BadRequestException(venueNotFound));
                return VenueDTO;
    }
}
Run Code Online (Sandbox Code Playgroud)

此示例中的serviceMethod()将从几个线程中调用,并且webClientBuilder是单个bean实例。WebClient.Builder类包含状态:baseUrl,这似乎不是线程安全的,因为很少有线程可以同时调用此状态更新。同时,WebClient本身似乎是线程安全的,如在多线程环境中使用Spring WebClient的正确方法中的回答中所述

我是否应该使用https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-webclient.html中提到的WebClient.Builder bean

Spring Boot为您创建并预配置了WebClient.Builder。强烈建议将其注入您的组件中,并使用它来创建WebClient实例。

我看到的解决方法之一是在不将任何状态传递给构建器的情况下创建WebClient,而不是:

WebClient webClient = webClientBuilder.baseUrl("http://localhost:8000").build();
Run Code Online (Sandbox Code Playgroud)

我会做:

WebClient webClient = webClientBuilder.build();
Run Code Online (Sandbox Code Playgroud)

并在uri方法调用中传递带有协议和端口的完整url:

webClient.get().uri("full url here", MyDTO.class)
Run Code Online (Sandbox Code Playgroud)

在我的情况下使用它的正确方法是什么?

spring spring-boot spring-webflux

2
推荐指数
1
解决办法
1143
查看次数

为什么在 GraalVM 社区版上使用 org.graalvm.polyglot 而不是 javax.script 包?

我有一个在java-8-openjdk-amd64上工作的 java 应用程序,它评估 java 脚本。现在我安装了 GraalVM 社区版graalvm-ce-19.2.0 (ubuntu 18.04) 并尝试评估一些 javascript 示例org.graalvm.polyglot.Context 并且它们是有效的,但是当我发现旧的 java 脚本代码崩溃并且堆栈跟踪显示它是用org. graalvm包而不是javax.script

import javax.script.ScriptEngine;
            ...
            ScriptEngine engine = 
            scriptFactory.getEngineByName("JavaScript");
            engine.put("form", postedAnswer);
            engine.put("question", jsQuestion);
            engine.put("answer", jsAnswer);
            engine.eval(validationJS); //here Exception thrown
Run Code Online (Sandbox Code Playgroud)

这里堆栈跟踪:

javax.script.ScriptException: org.graalvm.polyglot.PolyglotException: TypeError: invokeMember (getData) on JavaObject[com.researchforgood.survey.surveyengine.JSQuestion@504641f2 (com.researchforgood.survey.surveyengine.JSQuestion)] failed due to: Unknown identifier: getData
    at com.oracle.truffle.js.scriptengine.GraalJSScriptEngine.eval(GraalJSScriptEngine.java:348)
    at com.oracle.truffle.js.scriptengine.GraalJSScriptEngine.eval(GraalJSScriptEngine.java:323)
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
    at com.researchforgood.survey.surveyengine.service.StepService.validateAnswers(StepService.java:233)
    at com.researchforgood.survey.surveyengine.service.StepService.processAnswers(StepService.java:95)
    at com.researchforgood.survey.surveyengine.HttpSurveyHandler.doPost(HttpSurveyHandler.java:160)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at com.researchforgood.api.apigateway.ServletHandler.handle(ServletHandler.java:62)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345) …
Run Code Online (Sandbox Code Playgroud)

java graalvm

2
推荐指数
1
解决办法
846
查看次数

标签 统计

java ×3

spring ×2

graalvm ×1

hibernate ×1

http ×1

spring-boot ×1

spring-webflux ×1

url ×1