Boa noite a todos.
Estou montando um projeto usando JBoss Seam e usando o SQLServer 2008, fiz todos os passos, criei o projeto, fiz a engenharia reversa no banco, porém quando faço deploy da aplicação, aparece um erro no console :
Deployment “persistence.unit:unitName=webpolls-ear.ear/webpolls-ejb.jar#webpolls” is in error due to the following reason(s): org.hibernate.HibernateException: Wrong column type in polls.dbo.attributes for column attr_name. Found: nvarchar, expected: varbinary(255)
Bom, a tabela no banco tem um campo definido como nvarchar(100) e é justamente este campo que está causando problema.
Alguem já teve este problema ?
Bom, pesquisando sobre isso no google, eu descobri que o hibernate nao tem dialeto pra tratar os tipos, nvarchar, nchar e varbinary.
Encontrei um código que creio eu deveria resolver isso, mas mesmo especializando a classe org.hibernate.dialect.SQLServerDialect, o erro persiste.
O código que eu implementei foi :
[code]
public class UnicodeSQLServerDialect extends SQLServerDialect {
public UnicodeSQLServerDialect() {
super();
// Use Unicode Characters
registerColumnType(Types.VARCHAR, "nvarchar($l)");
registerColumnType(Types.CHAR, "nchar(1)");
registerColumnType(Types.CLOB, "nvarchar(max)");
// Microsoft SQL Server 2000 supports bigint and bit
registerColumnType(Types.BIGINT, "bigint");
registerColumnType(Types.BIT, "bit");
}
}[/code]
E também, no persistence.xml, eu alterei o dialeto para
Olá.
Ao que parece, solucionei o problema e vou descrever a solução.
1 - no arquivo persistence.xml, comentar a linha
2 - mudar os tipos dos atributos de Serializable para String, pois quando se faz a reversa usando o Seam, ele mapeia os campos nvarchar como Serializable.
Bom, fiz isso e a aplicação subiu e consegui gravar caracteres de outros idiomas, como por exemplo grego, persa, russo, chines.
Cara, obrigado pela informação!
Tenho um sistema usando JPA + MSSQL e somente consegui usar tabelas que apresentam colunas do tipo
NVARCHAR quando desativei a linha do
persistence.xml.