Erro ao inserir invalid byte sequence for encoding "UTF8": 0x00(RESOLVIDO)

Boa tarde, estou executando uma rotina que insere alguns registros, e o seguinte erro é apresentado:

15:07:16,551 ERROR SqlExceptionHelper:144 - ERRO: invalid byte sequence for encoding "UTF8": 0x00
15:07:16,551 ERROR ValidateSession:65 - org.hibernate.exception.DataException: ERRO: invalid byte sequence for encoding "UTF8": 0x00
15:07:16,567  WARN SqlExceptionHelper:143 - SQL Error: 0, SQLState: 25P02
15:07:16,567 ERROR SqlExceptionHelper:144 - ERRO: transação atual foi interrompida, comandos ignorados até o fim do bloco de transação

Classe que insere

public void save(Matricula matricula) throws FacadeException {

	FactoryDAO factory = BaseDAOFactory.getFactory();
	MatriculaDAO dao = factory.getMatriculaDAO();

	try {
		dao.save(matricula);
		geraLancamento(matricula);
	} catch (DAOException e) {
		throw new FacadeException(e);
	}

}

private void geraLancamento(Matricula matricula) throws FacadeException {

	FactoryDAO factory = BaseDAOFactory.getFactory();
	LancamentoDAO dao = factory.getLancamentoDAO();

	for(int count = 1; count <= matricula.getQtdeParcela(); count ++){
		Lancamento lancamento = new Lancamento();
		lancamento.setMatricula(matricula);
		lancamento.setParcela(count);
		lancamento.setValor(matricula.getValorParcela());
		lancamento.setDataVencimento(DateUtils.monthAdd(matricula.getDataVencimento(), count));

		try {
			dao.save(lancamento);
		} catch (DAOException e) {
			throw new FacadeException(e);
		}

		lancamento = null;
	}

}

DAOGenric

public void save(T t) throws DAOException {
	try {
		HibernateHelper.getManagedSession().save(t);
	} catch (Exception e) {
		throw new DAOException(e);
	}
}

HibernateHelper

public static Session getManagedSession() {
	return getManagedSession(true);
}

private static Session getManagedSession(boolean forceTransaction) {
	Session s = sessionFactory.getCurrentSession();
	if (forceTransaction && !s.getTransaction().isActive()) {
		s.beginTransaction();
	}
	return s;
}

public static Transaction getTransaction() {
	return getManagedSession(false).getTransaction();
}

Filtro que realiza o commit

	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {

	boolean tudoOk = false;

	try {
		
		boolean auth = JsfUtil.getFuncionarioLogged() != null;

		if (!auth && ((HttpServletRequest)req).getRequestURL().toString().contains("login.jsf")) {
			req.getRequestDispatcher(SIGNON_PAGE_URI ).forward( req, resp );  
		}else{
			chain.doFilter((HttpServletRequest) req, resp);
			tudoOk = true;
		}

	} catch (ServletException e) {
		log.error(e.getRootCause() == null ? e : e.getRootCause());
		throw e;
	} catch (IOException e) {
		log.error(e);
		throw e;
	} catch (RuntimeException e) {
		log.error(e);
		throw e;
	} finally {

		try{
			Transaction tx = HibernateHelper.getTransaction();
			if (tx.isActive()) {
				if (tudoOk){
					tx.commit();
				}else{
					tx.rollback();
				}
			}
		}catch(Exception e){
			log.error(e);
		}

	}
}

Desde já agradeço.

Bom dia a todos,

Caso alguém passe por esse problema, fica aqui a dica.
No momento em que eu estava inserindo, na tabela há uma coluna:

recebimento_taxa char(1),

Como se trata de um campo opcional, quando não selecionava uma opção para ele na tela, o valor da opção default “selecione” era setado no objeto, nada de anormal, ou seja, o problema ocorre devido o atributo estar matricula.recebimentoTaxa=""

	<p:outputLabel for="recebimentoTaxa" value="#{bundle.recebimentoTaxa}" />
	<p:selectOneMenu id="recebimentoTaxa" value="#{matriculaBean.matricula.recebimentoTaxa}" requiredMessage="#{bundle.recebimentoTaxa_required}" required="#{matriculaBean.valorTaxaRequerida}" style="width:100px;">
		<f:selectItem itemValue="" itemLabel="Selecione" /> //aqui estava o causador do problema, apenas mudei para <f:selectItem itemValue=" " itemLabel="Selecione" />
		<f:selectItem itemValue="R" itemLabel="Recebido" />
		<f:selectItem itemValue="N" itemLabel="Não Recebido" />
		<p:ajax update="dataRecebimento"></p:ajax>
	</p:selectOneMenu>

Abraços.

[size=14]
A verdadeira razão disto é que estão chegando ao banco de dados valores nulos.

O PostgreSQL não suporta armazenar valores nulos, ele termina por colocar esses carácteres --> “\0X00”, na qual é totalmente diferente do valor “null” que é suportada pela mesma.

Então, em outras palavras, precisa verificar se os valores estão chegando nulos, caso sim, substituir por “”, ou 0, ou 0.0; isso é tudo. ^^

Espero ter ajudado e boas codificações!! :smiley:
[/size]

Valew pela dica,

A única coisa que estranho nisso é que o PostgreSQL deixa definirmos uma coluna como NULL ou NOT NULL, mas obriga a inserimos algum valor, nem que esse seja um simples vazio.
APanhei muito com isso, tenho muitar colunas do tipo character(1) e sou forçado a preenche-las.

Abraços.

Valeu a dica…estava passando por esse mesmo problema no momento… e resolvi “fuçar” aqui e achei a solução…Obrigado