Java 连接到JPA存储库中数据库的Integer vs.int存在问题
我使用VisualParadigm生成数据库和相关代码,并将其放入Maven、SpringJPA存储库框架中。在一个类中,我碰巧将类成员定义为整数。VP生成代码时,生成了两个setter: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; } 这
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通常仅适用于引用类型。