Galera,
Queria saber como mapear uma chave estrangeira composta no hibernate. Tenho o seguinte relacionamento no banco de dado:
O meu login é a chave primaria da tabela operador, e vai como chave estrangeira pra tabela permissão, sendo que ele vai também fazer parte da chave primária. Dentro do Java tenho um Enum de permissões, que irá preencher a coluna nome_permissao.
Classe Operador:
@Entity
@Table(name = "operador")
public class Operador implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
/**
* Identificador para a classe. Login do operador.
*/
@Id
@Column(name = "login", length = 50, nullable = false)
private String login;
/**
* Senha do operador.
*/
@Column(name = "senha", length = 80, nullable = false)
private String senha;
/**
* Email do operador.
*/
@Column(name = "email", length = 50, nullable = false, unique = true)
private String email;
/**
* Nome do operador.
*/
@Column(name = "nome", length = 100, nullable = false)
private String nome;
/**
* Permissão do operador.
*/
@OneToMany(mappedBy = "operador")
private List<Permissao> permissoes;
/**
* Status do operador: pode ser "ATIVO" ou "INATIVO".
*/
@Enumerated(EnumType.STRING)
@Column(name = "status", length = 20, nullable = false)
private EnumStatusEquipamentoOperador status;
/**
* Funcionário do operador.
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "funcionario_id", nullable = true)
private Funcionario funcionario;
/**
* Data de cadastro do operador.
*/
@Column(name = "dt_cadastro", nullable = true)
@Temporal(TemporalType.TIMESTAMP)
private Date dataCadastro = new Date();
/**
* Data da ultima modificação no operador.
*/
@Column(name = "dt_modificacao", nullable = true)
@Temporal(TemporalType.TIMESTAMP)
private Date dataModificacao = new Date();
/**
* Operador que realizou a ultima modificação no operador.
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "operador_login", nullable = true)
private Operador operadorLogin;
Classe Permissao:
@Entity
@Table(name = "permissao", uniqueConstraints = { @UniqueConstraint(columnNames = { "login", "nome_permissao" }) })
public class Permissao implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
/**
* Login do operador que tem uma permissão.
*/
@Id
@Column(name = "login", length = 50, nullable = false)
private String login;
/**
* Nome da permissão.
*/
@Enumerated(EnumType.STRING)
@Column(name = "nome_permissao", length = 20, nullable = false)
private EnumPermissao nomePermissao;
/**
* Referência do operador que tem uma permissão.
*/
@OneToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "login", referencedColumnName = "login", insertable = false, updatable = false)
private Operador operador;
Alguem pode me ajudar como mapear as duas entidades para ficar de acordo com o modelo ER do banco de dados?