Então pessoal, estou com um problema na implementação de alguns testes pelo JUnit.
Quando eu chamo o método que salva a entidade ele mostra o seguinte erro:
12:48:55,531 ERROR BasicPropertyAccessor:94 - IllegalArgumentException in class: com.deltacore.model.base.ValueObject, setter method of property: ativo
12:48:55,531 ERROR BasicPropertyAccessor:98 - expected type: java.lang.String, actual value: java.lang.Boolean
O atributo está mapeado da seguinte forma no hbm:
<!-- Value Object -->
<property name="ativo" type="java.lang.String" column="LOT_IND_ATV" />
No banco a coluna é varchar(1) e recebe ‘S’ ou ‘N’
Este erro ocorre quando chamo o método saveOrUpdate()…
Assim, o que eu acho mais estranho é que ele ocorre apenas nos Testes de JUnit…
Acessando via Interface Gráfica, o método funciona normalmente!!
Alguém saberia o porque isto acontece???
Agradeço desde já a ajuda!
fiaux
Setembro 18, 2008, 1:43pm
#2
O que parece é que você passou um Boolean no lugar onde deveria ser uma String. Verifique seu código de teste.
Então…
Quando crio o objeto ele já recebe por padrão ‘S’ …
Não preciso ‘setar’ valores nesta variável!!!
Acredito que se eu estivesse passando um Boolean no lugar de uma String, o erro ocorreria na hora de setar a variável, e não na hora de salvar, correto?
fiaux
Setembro 18, 2008, 2:00pm
#4
[quote=Thiago_Luiz]Então…
Quando crio o objeto ele já recebe por padrão ‘S’ …
Não preciso ‘setar’ valores nesta variável!!!
Acredito que se eu estivesse passando um Boolean no lugar de uma String, o erro ocorreria na hora de setar a variável, e não na hora de salvar, correto?
[/quote]
Não sei, não sei como você implementou as coisas por aí. Mostre o código.
Método que cria o objeto e chama o método de salvar :
public static Lote getLote(int tipo, boolean salvar, String descricao) throws BOException {
Lote lote = new Lote();
if(tipo == LOTE_DESCRICAO)
lote.setDescricao(descricao);
if (salvar)
lote = assetBO.saveLote(lote, usuario);
return lote;
}
Método da classe BO:
public Lote saveLote(Lote lote, IUsuario usuario) throws BOException {
if (lote == null) {
return lote;
}
DAOFactory factory = DAOFactory.getFactory();
SessionDAO session = factory.createSessionDAO();
LoteDAO loteDAO = factory.getLoteDAO(session);
try {
session.beginTrans();
updateValueObject(lote, usuario);
// Na linha abaixo que ocorre o erro
loteDAO.saveOrUpdate(lote);
session.commit();
} catch (DAOException e) {
if (logger.isEnabledFor(Level.ERROR)) {
logger.error(e);
}
throw new BOException(BOException.ERRO_SAVE, e);
} catch (ValidationException e) {
throw new BOException(e);
} finally {
session.close();
}
return lote;
}
Método saveOrUpdate do DAO:
public void saveOrUpdate(T obj) throws DAOException, ValidationException {
try {
getSession().saveOrUpdate(obj);
processHibernatedBean(obj);
}catch (RuntimeException e) {
throw getDAOExceptionNoHib("Problema salvando ou fazendo update no objeto", e);
}
}