当java使用getBoolean-java,ORACLE时,转换为内部表示时出错
在oracle中使用当java使用getBoolean-java,ORACLE时,转换为内部表示时出错,java,oracle,hibernate,jpa,Java,Oracle,Hibernate,Jpa,在oracle中使用getBoolean获取数据类型char[1 char]时,我有一个错误指出无法转换为内部表示, 当记录是数字(如0-9)时,它将成功,但当记录是字符(如T、F(真、假)或Y、N(是、否)时,则会发生错误。这是我的密码 List<TestList> objects = query .setResultTransformer(Transformers.aliasToBean(TestList.class))
getBoolean
获取数据类型char[1 char]时,我有一个错误指出无法转换为内部表示,
当记录是数字(如0-9)时,它将成功,但当记录是字符(如T、F(真、假)或Y、N(是、否)时,则会发生错误。这是我的密码
List<TestList> objects = query
.setResultTransformer(Transformers.aliasToBean(TestList.class))
.setFirstResult(start).setMaxResults(count).list();
以下是错误的完整日志:
可抛出错误:84-原因:java.sql.SQLException:无法转换为内部表示
2017-09-14 20:10:58可抛出的错误:84-位于oracle.jdbc.driver.CharCommonAccessor.getBoolean(CharCommonAccessor.java:185)
2017-09-14 20:10:58可抛出的错误:84-位于oracle.jdbc.driver.t4ccharacessor.getBoolean(t4ccharacessor.java:697)
2017-09-14 20:10:58可抛出的错误:84-位于oracle.jdbc.driver.OracleResultSetImpl.getBoolean(OracleResultSetImpl.java:640)
2017-09-14 20:10:58可抛出的错误:84-位于oracle.jdbc.driver.OracleResultSet.getBoolean(OracleResultSet.java:390)
顺便说一句,我使用的是oracle11.2.0.4.0
,java7
,hibernate4.3.9
请帮帮我,伙计们,谢谢。
抱歉语法错误:)使用自定义转换器:
@Converter
public class BooleanConverter implements AttributeConverter<Boolean, String>{
@Override
public String convertToDatabaseColumn(Boolean value) {
if (Boolean.TRUE.equals(value)) {
return "1";
} else {
return "0";
}
}
@Override
public Boolean convertToEntityAttribute(String value) {
return "1".equals(value);
}
}
转换器api来自
javax.persistence
包。您必须使用JPA 2.1+。@MaciejKowalski当我尝试跟踪和调试时,错误发生在setResultTransformer(Transformers.aliasToBean(TestList.class))上,我看不到此函数中的代码,因为这是insite-hibernate-core-4.3.9.Final.jarGreat,很高兴看到它的id
@Converter
public class BooleanConverter implements AttributeConverter<Boolean, String>{
@Override
public String convertToDatabaseColumn(Boolean value) {
if (Boolean.TRUE.equals(value)) {
return "1";
} else {
return "0";
}
}
@Override
public Boolean convertToEntityAttribute(String value) {
return "1".equals(value);
}
}
@Convert(converter=BooleanConverter.class)
private Boolean installment;