Viva.
Mantendo a "coisa" genérica (sem sair do standard JPA) em termos de
atributos até estamos bem servidos ...
Para grupos de campos unique (campos relacionados):
@Table(
name="EMPLOYEE",
uniqueConstraints=
@UniqueConstraint(columnNames={"EMP_ID", "EMP_NAME"})
)
Para campos unique simples:
@Column(unique=true, nullable=false)
O problema mesmo é o "motor" da persistência depois tirar partido de
qualquer uma destas annotations, o que (pelo menos para já) está
apenas a ser feita para gerar/criar as tabelas na b.dados (O->R).
No entanto, já "desenhei" uma proposta para tentar solucionar o
problema de uma forma o mais genérica possível e com o código mais
"limpo" possível.
Já agora, fica aqui a minha ideia (ainda em esboço):
class ErroUnique {
boolean ok = true;
String superEntityName, errorEntityName, constraintErrorName;//
singleFieldName, groupFieldsName
(...)
}
ErroUnique validaEntidades(Entity ent){
//Ver quais os campos unique em @Table de ent
//Ver quais os campos unique simples de ent
//Ver as subentidades (que tenham annotations tipo: @ManytoOne,
@OneToMany, etc para verificar se as subentidades também tem campos
unique
//Chamar recursivamente este método para cada uma das sub-entidades
(ent.aninhadas)
//Consultar a BDados para ver se já existem estes dados inseridos
nos campos assinalados como unique
//return ErroUnique
}
Esta classe será uma EntityListener para depois podermos inclui-la nas
entidades com a annotation @EntityListeners
(class=ValidaUniques.class), sendo que o método validaEntidades(Entity
ent) seria anotado com @PrePersist para ser chamado de forma
"automática" a cada em.persist() ... tudo JPA.
Agora só falta implementar e analisar "buracos" que não esteja a ver
de momento.
Aceitam-se ideias, correcções e criticas ;)
Abraço.
Nuno Lima
On 12 Nov, 02:58, Samuel Santos <
sama...@gmail.com> wrote:
> Viva Nuno,
>
> Estás a usar o atributo unique na @Column (e.g.
> @Column(unique=true, nullable=false))?
>
> Eu tenho por princípio tentar usar só JPA (javax) sem nada específico do
> Hibernate e gerar a BD a partir das entidades e não o contrário. E raramente
> me deparo com problemas como tantas vezes aparecem nesta lista.
>
> Se chegares a alguma solução para esse problema informa também a malta ;)
>
> Cumps,
>
> --
> Samuel Santoshttp://
www.samaxes.com/
>
> 2009/11/12 Nuno Lima <
nunojorgel...@gmail.com>
>
>
>
>
>
> > Viva.
>
> > Parece que a lista está pouco activa - infelizmente - ou ninguém gosta
> > destes 2 "flavors" (hibernate+jpa) juntos ;)
>
> > De qualquer forma, como "quem quer belota, trepa", não fiquei parado e
> > entre outras informações que fui encontrando sobre este assunto,
> > deparei-me com um excelente artigo, muito bem escrito e que explica
> > toda esta problemática dos "uniques" e da persistência (afinal eu não
> > era o UNIQUE'o com este problema).
>
> > Aqui fica o link, para os interessados, espero que ajude quem se
> > deparar com o mesmo problema.
>
> >
http://www.lunatech-research.com/archives/2008/05/09/bean-validation-...