Ajuda campo texto grande (PostgreSQL + Hiberante + Spring)

Amigos, estou com um problema e preciso de ajuda.

Utilizo postgreSQL + java + hibernat + spring.

no meu banco eu tenho um campo do tipo TEXT, logo a minha entity foi gerada assim

	@Column(name="ds_situacao_processamento_ws", length=2147483647)
	private String dsSituacaoProcessamentoWs;

porem qdo eu coloco uma string grande nesse campo, ele simplemente não salva o conteudo desse campo

se eu colocar o

@Lob

ele fala que eu não posso salvar objetos grande quando estiver com o auto-commit habilitado, vou no meu applicationContext e coloco

<prop key="hibernate.connection.autocommit">false</prop>

porem continuo recebendo o erro:

Objetos Grandes não podem ser usados no modo de efetivação automática (auto-commit).

alguem pode me dar um help por favor??? preciso salvar um texto grande no banco… e se possivel continuar com o auto-comit(se bem que mesmo com ele false nao funcionou)

obrigado

Se vc estiver usando JPA.
Pode fazer assim:

[code] @Autowired
protected JpaTransactionManager txManager;

@Override
public void saveWithTransaction(T instance) {
	DefaultTransactionDefinition def = new DefaultTransactionDefinition();
	def.setName("complex");
	def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
	TransactionStatus status = txManager.getTransaction(def);
	try {
		entityManager.persist(instance);
	} catch (DaoException ex) {
		log.error("save failed", ex);
		txManager.rollback(status);
		throw ex;
	} finally {
		try {
			txManager.commit(status);
		} catch (DaoException e) {
			log.error("save failed", e);
			e.printStackTrace();
			txManager.rollback(status);
		}
	}
}[/code]

Uso este metodo para BLOB e LOB no postgreSQL.
Pois postgreSQL não aceita transaction anotada. Não me lembro o pq!!! :frowning:

t+

Quebrado, o problema e que eu estou utilizando o hibernateTemplate do spring, e nao descobri como fazer uma transação ‘na mão’ voce sabe?

obrigado

Campo de texto muito grande você teria que mapear como Blob. Existe essa anotação para JPA/Hibernate.

entao ja tentei o @Lob mas mesmo assim nada

Como você mapeou?

Outra coisa, mapeia com lob, faz um drop da sua coluna e deixa a aplicação criar.

Então hoje esta assim:

@Column(name="ds_situacao_processamento_ws", length=2147483647)  
private String dsSituacaoProcessamentoWs;  

porem se eu colocar o @Lob, ele fala que nao pode salvar em auto-commit, eu vou no meu applicationContext e coloco o auto-commit para false, e ele continua falando a mesma coisa

fabioebner, tenta assim…

getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Transaction tx = null; try { tx = session.beginTransaction(); // .. salva o o objeto session.flush(); tx.commit(); } catch try { if (tx != null) tx.rollback(); } catch (HibernateException e1) { // log etc ... } } finally { try { if (session != null) session.close(); } catch (HibernateException e) { // log etc ... } } } }

Como seu campo é muito grande é melhor mapear como lob.
E o campo do banco coloca como OID.
Vamo ver se roda agora !!! :thumbup:

t+

obs: pode manter o autocommit como true

Quebrado, conforme descrevi acima

eu utilizo o hibernateTemplate do spring para gerenciar as transacoes e nao consigo(pelo menos ate hoje nao descobri) abrir uma transacao assim nao mao