小编Spa*_*eri的帖子

从另一个类的静态方法初始化Spring bean?

我试图创建Hibernate Validator bean,并遇到这个问题,从另一个类中的静态工厂方法创建一个bean.我找到了一种Spring方法来初始化我的Validator bean(底部的解决方案),但问题本身仍未解决.验证器在此处用作示例案例.

这就是我在Java中创建Validator实例的方法

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Run Code Online (Sandbox Code Playgroud)

这就是我尝试在applicationContext.xml中创建bean的方法

<bean id="validatorFactory" 
    class="javax.validation.ValidatorFactory" 
    factory-method="javax.validation.Validation.buildDefaultValidatorFactory" />

<bean id="validator" 
    class="javax.validation.Validator" 
    factory-bean="validatorFactory"
    factory-method="getValidator" />
Run Code Online (Sandbox Code Playgroud)

我的理解是,在"工厂方法"中,您只能访问在"class"参数中定义的类中定义的静态方法.由于方法buildDefaultValidatorFactory()是静态的,我不能创建一个Validation实例,并将它作为validatorFactory的"factory-bean"给出,如下所示:

<bean id="validation" class="javax.validation.Validation" />

<bean id="validatorFactory" 
    class="javax.validation.ValidatorFactory" 
    factory-bean="validation"
    factory-method="buildDefaultValidatorFactory" />
Run Code Online (Sandbox Code Playgroud)

这最终会出现错误消息

"检查是否存在具有指定名称的方法,并且它是非静态的 "

问题是你如何在Spring的这种情况下创建bean?

这就是我解决Validator问题的方法:

<bean id="validator"
  class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
Run Code Online (Sandbox Code Playgroud)

java spring bean-validation applicationcontext

42
推荐指数
1
解决办法
6万
查看次数

将Java Double Infinity和NaN值存储到MS SQL 2008数据库

在我们的业务逻辑中,我们必须处理正值和负值Double.Infinity以及Double.NaN值.

我们必须将这些值存储到Microsot SQL Server 2008数据库中.问题是Microsot SQL Server不支持infinity或nan值.(SQL Server 2005的问题描述,也适用于MS SQL Server 2008).

我们使用Hibernate 3.6.7作为我们的JPA实现和Microsoft的sqljdbc4驱动程序版本4.0.2206.100.

我们试图通过将JPA实体的列定义设置为VARCHAR来解决此问题

@Column(columnDefinition = "VARCHAR(40)")
private Double foo;
Run Code Online (Sandbox Code Playgroud)

即使列定义在数据库中正确更改为VARCHAR,这似乎也没有任何影响.似乎无限值是在JDBC驱动程序的验证中捕获的,因为我们在尝试INSERT Double.Infinity值时得到以下stacktrace :

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The incoming tabular data  stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 6 (""): The supplied value is not a valid instance of data type float. Check the source data for invalid values. An example of an invalid value is data of numeric …
Run Code Online (Sandbox Code Playgroud)

java sql-server double hibernate infinity

7
推荐指数
1
解决办法
4270
查看次数