Isso ocorre porque o comprimento padrão de
VARCHAR
colunas em instruções DDL criadas pela maioria dos provedores JPA (incluindo Hibernate e EclipseLink) é 255. Especificando o length
atributo para o @Column
A anotação ajuda a substituir o valor, para que o novo valor seja selecionado pelo gerador de esquema do provedor JPA. Esta é uma suposição incorreta. O provedor JPA criará tabelas apenas uma vez e não alterará dinamicamente o comprimento da tabela subjacente durante o tempo de vida do aplicativo e somente se você configurar o provedor para criar/atualizar as definições de tabela em primeiro lugar. Além disso, o mapeamento padrão de
String
é o SQL VARCHAR
modelo. Você parece ter configurado o provedor JPA para criar tabelas conforme necessário (depois de possivelmente eliminá-las), durante o processo de inicialização. Se você estiver usando o Hibernate, isso é feito usando o
hibernate.hbm2ddl.auto
propriedade especificada em persistence.xml
com um valor de update
, create
ou create-drop
. Com EclipseLink, você estaria especificando a propriedade eclipselink.ddl-generation
com um valor de create-tables
ou drop-and-create-tables
. Ambas as propriedades acima não são recomendadas para uso em uma produção ambiente . A abordagem ideal é ter scripts DDL para criar as tabelas. Já que você está usando
VARCHAR
, você deve especificar um comprimento adequado na definição da coluna, para ajustar o comprimento máximo da entrada do usuário . Além disso, como você está usando VARCHAR
sobre CHAR
, o mecanismo de banco de dados garantirá que o espaço de armazenamento alocado dependerá do tamanho dos registros armazenados. Se você não precisa de uma String para o padrão
VARCHAR
mapeamento e, em vez disso, usar outro mapeamento válido, você deve usar columnDefinition
atributo do @Column
anotação. Um exemplo de uso para mapear Calendar
para o TIMESTAMPTZ
O tipo de dados SQL é mostrado no JPA WikiBook
; você precisará modificá-lo para atender às suas necessidades.