Como definir o tamanho do campo a ser criado (ex: VARCHAR(50)) no TopLink?

Como eu faça para definir na anotação da entidade o tamanho dos campos a serem criados no DDL?

Um Exemplo:
No MySQL ele cria campos texto como VARCHAR(255), mas um nome de pessoa por exemplo não precisa de um tamanho de 255

Eu gostaria de saber se tem como anotar o tamanho do campo a ser criado.

Eu respondendo para mim mesmo :roll:

@Column(name = "NOME", columnDefinition = "VARCHAR(60)") public String getRazaoSocial() { return razaoSocial; }

Não, você deve usar:

Por acaso esse length valida (dispara Exception) caso seja adicionado um texto maior no campo?

[quote=garcia-jj]Não, você deve usar:

@Column(length=50)[/quote]E no caso como o que segue, como fazer para definir casas decimais, valor default, etc?

@Column(name = "ALIQUOTA", columnDefinition = "DECIMAL(4,2) DEFAULT 0.0") public Double getAliquota() { return aliquota; }

javer, length define o tamanho do campo e precision define a precisão (no caso de decimais). Digo para você evitar usar o atributo columDefinition porque assim você pode deixar sua aplicação pouco portável. É bom deixar o hibernate definir os campos (minha visão, obvio).

Só que isso não valida não. @Column é apenas para as definições da coluna. Para validação você pode usar o Hibernate Validator. Ele funciona para qualquer ORM e não é dependente do hibernate-core. Você pode usar tranquilamente no toplink. Você usa toplink ou eclipselink?

Com o hibernate validator você pode usar coisas como:

[code]@Email // valida se o campo é email
private String email;

@NotNull // não permite nulos
private String nome;

@Length(max=50) // valida o tamanho
private String profissao;[/code]

Depois de “bater bastante a cabeça” cheguei a conclusão que o atributo na entidade tem que ser BigDecimal para dar certo assim:

@Column(name = "ALIQUOTA", precision = 4, scale = 2) public BigDecimal getAliquota() { return aliquota; }
No BD fica assim, mas ainda não sei como passar o default, de 0,00 por exemplo.

[code]FIELD TYPE COLLATION NULL KEY DEFAULT


ALIQUOTA DECIMAL(4,2) (NULL) YES (NULL)
[/code]

[quote=garcia-jj]javer, length define o tamanho do campo e precision define a precisão (no caso de decimais). Digo para você evitar usar o atributo columDefinition porque assim você pode deixar sua aplicação pouco portável. É bom deixar o hibernate definir os campos (minha visão, obvio).

Só que isso não valida não. @Column é apenas para as definições da coluna. Para validação você pode usar o Hibernate Validator. Ele funciona para qualquer ORM e não é dependente do hibernate-core. Você pode usar tranquilamente no toplink. Você usa toplink ou eclipselink?

Com o hibernate validator você pode usar coisas como:

[code]@Email // valida se o campo é email
private String email;

@NotNull // não permite nulos
private String nome;

@Length(max=50) // valida o tamanho
private String profissao;[/code][/quote]Eu uso (estou começando, ainda não tenho nenhuma aplicação realmente usando) TopLink e o ambiente é Desktop (Swing).
Quais .jars do Hibernate Validator eu preciso?

Apenas o hibernate validator. Eu estou usando a 4.0.2.GA. https://www.hibernate.org/412.html

Na verdade você pode usar qualquer decimal do Java, pode ser double ou float também (tanto primitivo como wrapper). Quando ao valor default realmente eu não sei como fazer, pois a documentação não diz nada sobre isso. Nesse caso acho que você pode usar isso no columnDefinition pois todas as base de dados usam um padrão para isso:

Quando eu uso Double no atributo no MySQL ele gera um DOUBLE sem precisão nenhuma.

Estou pegando o Hibernate Validator e vou tentar usar ele junto tom o TopLinnk.

[quote=garcia-jj]javer, length define o tamanho do campo e precision define a precisão (no caso de decimais). Digo para você evitar usar o atributo columDefinition porque assim você pode deixar sua aplicação pouco portável. É bom deixar o hibernate definir os campos (minha visão, obvio).

Só que isso não valida não. @Column é apenas para as definições da coluna. Para validação você pode usar o Hibernate Validator. Ele funciona para qualquer ORM e não é dependente do hibernate-core. Você pode usar tranquilamente no toplink. Você usa toplink ou eclipselink?

Com o hibernate validator você pode usar coisas como:

[code]@Email // valida se o campo é email
private String email;

@NotNull // não permite nulos
private String nome;

@Length(max=50) // valida o tamanho
private String profissao;[/code][/quote]
Amigo preciso que você me dê alguma dica de como se usa o Hibernate Validator, baixei o arquivo hibernate-validator-4.0.2.GA.jar mas não sei como configurar no meu sistema Desktop.

O que tenho que fazer? Algum xml em algum lugar? (fora o .jar no classpath). Sei que existe uma massa gigantesca que usa Hibernate para web mas em Swing parece que pouca gente usa.

[quote=javer]Amigo preciso que você me dê alguma dica de como se usa o Hibernate Validator, baixei o arquivo hibernate-validator-4.0.2.GA.jar mas não sei como configurar no meu sistema Desktop.

O que tenho que fazer? Algum xml em algum lugar? (fora o .jar no classpath). Sei que existe uma massa gigantesca que usa Hibernate para web mas em Swing parece que pouca gente usa.[/quote]

O hibernate-validator é standalone, ou seja, leva somente o nome do hibernate mas não tem nada a ver com o hibernate. Felizmente, pois assim podemos usa-lo também no toplink, ibatis…

Aqui tem os docs dele: http://docs.jboss.org/hibernate/stable/validator/reference/en/html_single/

Nunca usei events no toplink, então você terá que pesquisar/testar melhor sobre como configurar para rodar nele. Basicamente o hibernate validator precisa apenas de alguns listeners para que a validação funcione. São esses os eventos:

pre-update=org.hibernate.cfg.beanvalidation.BeanValidationEventListener
pre-insert=org.hibernate.cfg.beanvalidation.BeanValidationEventListener
pre-delete=org.hibernate.cfg.beanvalidation.BeanValidationEventListener

Não sei como configurar eventos no toplink, você sabe como fazer isso?