关于Jackson/JPA组合的问题
如果当前应用程序中有大约20个实体,并且我在POM中添加了Jackson依赖项,是否意味着所有实体都默认准备转换为JSON对象?我看到一个示例项目似乎只有类被注释为@JsonIgnored跳过JSON.如果是这样,那怎么会发生这种机制背后的原因呢?如何JACKSON处理那些没有任何杰克逊注释的实体,默认情况下是否被忽略?我一直在网上寻找资源,但运气不好.
如果20个实体中只有一个需要映射到JSON对象,是否意味着我必须将@JsonIgnore添加到所有其他19个实体?如果没有,如何Jackson区分实体工作?
谢谢.
我的本地Java环境仍然存在
java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10)
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01, mixed mode)
Run Code Online (Sandbox Code Playgroud)
当我配置Jboss时,我试图关闭Tiered Compiler,就像Oracle 在这里建议的那样,现在有jvm参数(带-XX:-TieredCompilation):
VM Arguments: -XX:+UseCompressedOops -Dprogram.name=standalone.bat
-XX:-TieredCompilation -XX:+PrintGCDetails -Xloggc:E:\serverLog\jvm.log
-Xms1303M -Xmx1303M -XX:MaxPermSize=256M
-Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000
-Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true
-Djboss.modules.system.pkgs=org.jboss.byteman
-Djboss.server.default.config=standalone.xml -Dorg.jboss.boot.log.file=E:\JAVA
\JBOSS\EAP-6.0.0.GA\jboss-eap-6.0\standalone\log\boot.log
-Dlogging.configuration=file:E:\JAVA\JBOSS\EAP-6.0.0.GA\jboss-eap-6.0
\standalone/configuration/logging.properties
Run Code Online (Sandbox Code Playgroud)
但是,我仍然看到分层编译器出现在JBoss的boot.log中:
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
Run Code Online (Sandbox Code Playgroud)
我想知道HotSpot 64-Bit Tiered Compilers手段是否-XX:-TieredCompilation没有生效?那我怎么能真正关闭分层编译呢?
奇怪的是我添加-server了jvm参数,但它从未出现在Jboss的boot.log中的jvm参数中.
恕我直言,这个问题quartz并不是很清楚:repeatInterval
如果该方法花费的时间比 长repeatInterval,会发生什么,即使当前方法没有完成,它是否也会触发触发器?如果该方法创建数据源对象,是否会导致连接池问题?
说明该方法通常需要5几秒钟才能完成,但可能会激增到10几秒钟,并且repeatInterval设置为8000(8 秒)
下次触发时会发生什么?我做了一些示例测试,看起来它会在16th第二次发生,因为第一次尝试8000ms 失败了
是这样的吗?对服务器性能有影响吗?
什么可能导致该CriteriaQuery orderBy方法停止工作?
以下是实现:
OpenJPAEntityManager kem = OpenJPAPersistence.cast(entityManager());
kem.getFetchPlan().clearFetchGroups();
kem.getFetchPlan().addFetchGroup("order_search");
CriteriaBuilder builder = kem.getCriteriaBuilder();
CriteriaQuery<Order> query = builder.createQuery(Order.class);
Root<Order> order = query.from(Order.class);
query.select(order);
Predicate main_condition = buildWhereClause(builder, query, order, target_states, orderDate_from, orderDate_to, dueDate_from, dueDate_to, username);
query.where(main_condition);
query.orderBy(builder.desc(order.get("orderDate")));
TypedQuery<Order> q = entityManager().createQuery(query);
if (firstResult != 0)
q.setFirstResult(firstResult);
if (maxResults != 0)
q.setMaxResults(maxResults);
Run Code Online (Sandbox Code Playgroud)
通过分页,当有 15 条记录并且我们希望每页有 5 条记录时,它应该是:
-page1- 1 2 3 4 5 -page2- 6 7 8 9 10 -page3- 11 12 13 14 15
Run Code Online (Sandbox Code Playgroud)
但现在我们得到的是
-page1- 1 2 3 …Run Code Online (Sandbox Code Playgroud) 引自Oracle在线文档
与索引不同,可以使用SELECT语句直接访问实例化视图.但是,建议您尝试避免编写直接引用实例化视图的SQL语句,因为在不影响应用程序的情况下很难更改它们.相反,让查询重写透明地重写您的查询以使用物化视图.
我不太明白direct reference materialized view在上下文中究竟是什么意思,听起来好像SELECT声明没关系,但是不推荐使用外键加入物化视图和订单表/视图,甚至select不建议使用它?为什么?
JPQL 使这种更改非常容易:
Select o from Orders as o where....
Select o.id from Orders as o where....
Run Code Online (Sandbox Code Playgroud)
但在标准查询中:
CriteriaBuilder builder = kem.getCriteriaBuilder();
CriteriaQuery<Orders> query = builder.createQuery(Orders.class);
Root<Order> orders= query.from(Orders.class);
query.select(orders);
....
Run Code Online (Sandbox Code Playgroud)
看起来选择项是由 builder.createQuery(Order.class) 定义的,没有任何灵活性。
我知道我们可以使用 Tuple.class,但除了喜欢之外,还有什么更好的方法可以从复杂的查询中获得额外的 id(只有一个字段)?没有这样的特征标准查询变得非常缺乏灵活性。
尝试从NodeJS学习基本功能,将基本字符串附加到带有变量的文件中:
const fs = require('fs');
const os = require('os');
var user = os.userInfo();
fs.appendFile('test.txt', 'Hello ${user.username}!');
Run Code Online (Sandbox Code Playgroud)
从test.txt我得到:
Hello ${user.username}!
Run Code Online (Sandbox Code Playgroud)
这里出什么问题了?
我做了一个过滤器来HttpServletRequest从所有请求中捕获sevlet 路径
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;
// debug to see the output
String path = request.getServletPath();
filterChain.doFilter(request, response);
}
Run Code Online (Sandbox Code Playgroud)
jsp 中有一个 URL 没有映射到它的控制器或视图
<div>
<spring:url value="/app" var="app_url" htmlEscape="true"/>
<a href="${app_url}"><spring:message code="label_3rd_app" /></a>
</div>
Run Code Online (Sandbox Code Playgroud)
但是,当在过滤器上调试时单击 url 时,我看到request.getServletPath()来自两个请求的值:
/null
/null/app
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么request.getServletPath()从不返回/app?
跑步时
./mvnw spring-boot:run
Run Code Online (Sandbox Code Playgroud)
当前的Spring Boot应用程序可以在浏览器中使用当前URL打开
http://localhost:8080/
Run Code Online (Sandbox Code Playgroud)
但不是
http://localhost:8080/AppName
Run Code Online (Sandbox Code Playgroud)
因此,即使在Swagger中,API也必须像这样检索
http://localhost:8080/api/swagger.json
Run Code Online (Sandbox Code Playgroud)
代替这个
http://localhost:8080/AppName/api/swagger.json
Run Code Online (Sandbox Code Playgroud)
那么如何AppName在上下文中添加?在以前的web.xml基于xml的日子里很容易,在基于Java的配置中我添加了
spring.application.name=AppName
Run Code Online (Sandbox Code Playgroud)
但仍然无法解决问题。
我知道countSpark 中的 action 可能很昂贵,所以为了提高性能,我想有一种不同的方式来检查查询是否可以返回任何结果
这是我所做的
var df = spark.sql("select * from table_name where condition = 'blah' limit 1");
var dfEmpty = df.head(1).isEmpty;
Run Code Online (Sandbox Code Playgroud)
如果我使用上述解决方案来检查查询结果,它是一个有效的解决方案还是有任何潜在的未捕获错误?不过,它要快得多。
spring ×4
java ×3
jpa ×3
ejb ×2
jakarta-ee ×2
apache-spark ×1
hibernate ×1
jackson ×1
java-ee ×1
javascript ×1
jboss ×1
jpql ×1
json ×1
jsp ×1
jvm ×1
node.js ×1
openjpa ×1
oracle ×1
spring-boot ×1
spring-mvc ×1
sql ×1
view ×1