我正在使用Hibernate SQL Query从表(来自MySQL数据库)读取数据。 问题是,该表包含一个映射到Hibernate Model中的char的列,有时该列为空。 而且我想这是我的例外所在。 如何在不出现此错误的情况下将一列char映射到我的hibernate模型? 谢谢你的回答!
感谢您的回答! 我的列不可为空(我使用的是MySQL,此列为非NULL) 然后,我不认为
if (str == null) {
是合适的。
错误是:
15:30:35,289 INFO CharacterType:178 - could not read column value from result set: LSFUS11_20_; String index out of range: 0
导致以下异常:
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:558)
我想我可以试试你的解决方案,但是:
if (str == "") {
因为它不能为null,所以它只是一个空字符串。
感谢您的代码,我将尝试一下!
答案 0 :(得分:3)
我从你的问题中假设你将它映射到原始角色。下一次,请发布您收到的堆栈跟踪(如果您的项目过于敏感,您可以在您调用它的地方留下,只能包含hibernate内容)。
如果映射到原始字符并且它为null,则会出现异常,因为基元不能为它们分配空值。
此类将缓解此问题,“null”字符将作为表示“0”的字符返回。您可以根据自己的喜好自定义:
import java.sql.ResultSet;
import java.sql.SQLException;
import org.hibernate.type.CharacterType;
public class NullCharacterType extends CharacterType {
/**
* Serializable ID generated by Eclipse
*/
private static final long serialVersionUID = 1L;
public NullCharacterType() {
super();
}
public Object get(final ResultSet rs, final String name)
throws SQLException {
final String str = rs.getString(name);
if (str == null || str.length() == 0) {
return new Character((char) 0);
} else {
return new Character(str.charAt(0));
}
}
}
要在你的hibernate映射中使用这种新类型,之后你会遇到类似的事情:
<property name="theChar" type="character">
现在,您只需将类名指定为您的类型:
<property name="theChar" type="yourpackage.NullCharacterType">
但是,最佳做法是不使用原始类型进行数据库映射。如果可能的话,使用Character而不是char,因为这样你就不会遇到null问题(null可以分配给包装器类型)。
答案 1 :(得分:0)
搜索您的JBoss(服务器)是否在lib文件中存在mysql.jar
(mysql-connector-java-5.1.7-bin)。
即使我遇到同样的问题,在添加mysql.jar
文件后,它也能正常工作。
答案 2 :(得分:0)
使用本机函数LEFT或RIGHT更改原点
中的列数据类型让我们假设这是给出错误的SQL查询 从用户中选择用户名
改变它: 从用户
中选择 LEFT (用户名, 100 )该数字应该等于字段的大小