Hibernate Batch更新从update [0]返回意外的行数;实际行数:0;预期:1

时间:2013-09-26 19:13:14

标签: java hibernate jpa

我在使用Hibernate时遇到了麻烦。

我有这个例外

Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

我正在尝试从数据库中显示日期,我的一个列是一个字符,我班上有一个Enum

public enum Status {

    CADASTRADA('C', "Cadastrada"),
    APROVADA('A', "Aprovada"),
    LIBERADA('L', "Liberada"),
    BLOQUEADA('B', "Bloqueada");

    public char index;
    public String descricao;

    private Status(char index, String descricao) {
        this.index = index;
        this.descricao = descricao;
    }

    public static Status valueOf(char index) {
        for (Status status : Status.values()) {
            if (status.equals(index)) {
                return status;
            }
        }
        return null;
    }

    public String getDescricao() {
        return this.descricao;
    }

    public char getIndex() {
        return this.index;
    }

}

`

我创建了一个TypeClass来转换

`public class FilialStatusType extends TypeHibernate {     public static final String TYPE =“filialStatusType”;

@Override
public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor sessionImpl, Object obj)
        throws HibernateException, SQLException {

    String index = rs.getString(names[0]);

    return StringUtil.isStringNullOrEmpty(index) ? null : Filial.Status.valueOf(index.charAt(0));
}

@Override
public void nullSafeSet(PreparedStatement ps, Object value, int index, SessionImplementor session)
        throws HibernateException, SQLException {
    Filial.Status status = (Filial.Status) value;

    if (NullUtil.isNull(status)) {
        ps.setNull(index, CharacterType.INSTANCE.sqlType());
    } else {
        ps.setString(index, String.valueOf(status.index));
    }
}

@Override
public Class<Filial.Status> returnedClass() {
    return Filial.Status.class;
}

} `

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

这可能与您的比较方式有关:

if (status.equals(index))

我认为你不能比较这样的enumchar

答案 1 :(得分:0)

有一些事情可能导致这种情况:

  • 触发器/规则/ plsql可能会拒绝或拒绝您的更改
  • 你没有权利
  • 另一位用户已经执行此操作
  • 某些数据库支持只读连接。

还有很多。

如果经常发生这种情况,您应该使用@version字段。实现这些实体。