Como evitar duplicidade de registro com Hibernate

Olá pessoal.

Tenho uma entidade chamada Aluno que está implementada assim (resumo):

@Entity
class Aluno

@Id@GeneratedValue
private int id;

private int rg;
private String nome;

Como fazer com que o campo “rg” seja apenas único, ou seja, o usuário não pode cadastrar a mesma pessoa outras vezes no banco de dados, enquanto aquele “rg” existir no BD. Qual anotação do Hibernate devo usar no atributo “rg”?

Desde já sou grato pela atenção e opiniões.

Como o RG será a sua chave primária na sua tabela coloca anotação @id em RG. Com isso
o hibertante não vai permitir que o mesmo RG seja cadastrado mais de uma vez. Da forma que está a sua VO com
um sequencial como PK e não tem como garantir…

você pode tentar algo como isso

@Table(name="tbl_sky", uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})} )

ou simplesmente isso

@Column(unique = true)

[quote]Como o RG será a sua chave primária na sua tabela coloca anotação @id em RG. Com isso
o hibertante não vai permitir que o mesmo RG seja cadastrado mais de uma vez. Da forma que está a sua VO com
um sequencial como PK e não tem como garantir… [/quote]

eu concordo, mas sempre tem um usuário que digita o rg errado, e depois para alterar chave primária não é tão simples assim

[quote=mark_domi][quote]Como o RG será a sua chave primária na sua tabela coloca anotação @id em RG. Com isso
o hibertante não vai permitir que o mesmo RG seja cadastrado mais de uma vez. Da forma que está a sua VO com
um sequencial como PK e não tem como garantir… [/quote]

eu concordo, mas sempre tem um usuário que digita o rg errado, e depois para alterar chave primária não é tão simples assim[/quote]

Então vc acha que é melhor eu continuar usando o campo “id” como @Id e usar a anotação @Column(unique=true) no campo “rg”?
Pq assim, toda minha aplicação (gerar faturas, listar faturas, relacionamento com a entidade Fatura, etc…) está baseada no “id” do Aluno.

exatamente isso, eu manderia o “id” como @Id e adicionaria a coluna como indice unico @Column(unique=true),

se for um trabalho da faculdade, o professor vai tirar ponto porque o rg deveria ser pk, assim como jcmird mencionou, mas na vida real, a verdade é outra, se vc mudar sua PK (@id) para o RG, você terá problemas como o citado anteriormente, e vai ter que mudar o relacionamento com o faturamento e outras tabelas que vc possa estar utilizando

O trabalho não é acadêmico. Estou fazendo esse sisteminha pra ajudar minha mãe na escola dela.
O objetivo é controlar os pagamentos dos alunos, listar os inadimplentes, saber o quanto “entra” de dinheiro (receita), o quanto “falta” entrar…enfim…aí conforne vêm as idéias eu vou tentando criar algo. To pensando em criar umas classes de despesas , pra ir aos poucos gerando uma projeção financeira.

Adiantando, se alguém tiver uma idéia rápida e simples de como criar classes de despesas nesse meu sistema (aluguel, contas de ocnsumo, salarios, extras…etc), irá me ajudar bastante. Estou utilizando Hibernate, Vraptor para o controle e JSP (logo mais vou ver se consigo jogar minha visualização com Velocity).

De início, eu imagino asism: criar uma classe chamada Despesa, que tem os TIPOS de despesa, daí eu vou generalizando. É essa a idéia?

Vou tentando aqui, e qualquer dúvida qto a lógica de como criar isso, eu posto melhor em outro tópico.

Agradeço a atenção e ajuda, que foram mto construtivas pra mim.