Java 连接到JPA存储库中数据库的Integer vs.int存在问题

Java 连接到JPA存储库中数据库的Integer vs.int存在问题,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我使用VisualParadigm生成数据库和相关代码,并将其放入Maven、SpringJPA存储库框架中。在一个类中,我碰巧将类成员定义为整数。VP生成代码时,生成了两个setter: public void setCapacityDown(Integer value) { this.capacityDown = value; } public void setCapacityDown(int value) { this.capacityDown = value; } 这

我使用VisualParadigm生成数据库和相关代码,并将其放入Maven、SpringJPA存储库框架中。在一个类中,我碰巧将类成员定义为整数。VP生成代码时,生成了两个setter:

public void setCapacityDown(Integer value) {
    this.capacityDown = value;
}

public void setCapacityDown(int value) {
    this.capacityDown = value;
}
这段代码可以运行,但当用户向服务器发送save请求时,它会失败,因为框架不知道调用哪个setter

我在VP中从Integer更改为int,重新生成代码,并得到一个setter。现在,该类将按预期保存。但是,当服务器在数据库上运行查询时,我现在得到一个getOutputStream(),该响应已经被调用(因为当出现新错误时,它已经开始输出JSON)。对于每种情况(一个setter和两个setter),我可以在一个查询上比较Hibernate的输出。对于两个setter情况(查询在其中运行),我得到了11个ServiceLevel的Hibernate语句(setter在其中):

休眠:选择servicelev0。ServiceProfileID作为Service12\u 32\u 0\u, servicelev0.ID为ID1\u 31\u 0\u,servicelev0\u.ID为ID1\u 31\u 1\u, servicelev0_u0.CapacityDown为Capacity2_31_1,servicelev0_0.CapacityUp 作为能力3,服务级别0。创建作为创建4, servicelev0。删除为Deleted5\u 31\u 1,servicelev0。描述为 将6_31_1_、服务级别0_.UnitsDownID描述为UnitsDo11_31_1_, servicelev0\u.LastModified为LastModi7\u 31\u,servicelev0\u.Name为 名称8_31_1_,服务级别0_。供应包作为供应9_31_1_, servicelev0.SalesDescription作为SalesDe10\u 31\u 1\, servicelev0.ServiceProfileID为Service12\u 31\u 1\u, servicelev0_u.UnitsUpID作为ServiceLevel中的UnitsUp13_31_1 servicelev0\其中servicelev0\ ServiceProfileID=

对于单setter的情况,我得到6条相同的语句,然后是:

java.lang.IllegalStateException:getOutputStream()已被删除 要求在 org.apache.catalina.connector.Response.getWriter(Response.java:578)


堆栈跟踪只包含异常的数据,而不包含我试图跟踪的错误的数据

终于明白了。ServiceLevel表有几行,其中感兴趣的列为null。一旦该列/成员的服务器代码从整数更改为int,则该代码尝试将a插入int时失败


如果堆栈跟踪提供了关于这一点的线索,而不是一般的getOutputStream()错误,那就太好了。

getOutputStream()
getWriter()
是互斥的,您可能知道。在您的例子中,我建议您尝试在IDE中调试错误,并在
getWriter()
方法中设置断点。也许您可以通过查看调用堆栈来追踪真正的问题。使用原语作为实体的实例字段没有什么好处。JPA提供者通常只使用引用类型,尤其是在进行JDBC调用时。。。所以你的
int
无论如何都会被装箱。请注意,JSON通常仅适用于引用类型。