Boa noite,
Gostaria de uma ajuda, pois bateu uma enorme dúvida!
Estou com dúvida de como mapear o seguinte relacionamento Funcionario x PermissaoFuncionario
public class Funcionario implements java.io.Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="id_creator")
@Column(name="id")
private Long id;
@OneToMany(mappedBy="funcionario", cascade={CascadeType.ALL}, fetch=FetchType.LAZY)
private Set<PermissaoFuncionario> permissoes;
}
public class PermissaoFuncionario implements java.io.Serializable, Comparable<PermissaoFuncionario> {
@Id
@OneToOne
@JoinColumn(name = "id_permissao")
private Permissao permissao;
@Id
@OneToOne
@JoinColumn(name = "id_funcionario")
private Funcionario funcionario;
}
Seria possível eu adotar a mesma solução para Venda x ItemVenda??
Desde já agradeço!
Você precisa mesmo desse relacionamento bidirecional?
O mapeamento está errado. Se é bidirecional e de um lado você tem one to many, do outro também precisa ter (embora eu discorde da abordagem que você seguiu, cada funcionario tem várias permissões e cada permissão está associada a um único funcionário?)
Reveja a estrutura e pense nisso.
Boa tarde drsmachado,
Realmente estou perdido, batendo cabeça em relação a esses mapeamentos!
Minha idéias é apenas associar as permissões de um dado funcionário.
drsmachado,
Poderia me ajudar novamente, o relacionamento bidirecional não é necessário. Hoje está assim:
Funcionario.java
@Entity
@Table(schema = "public", name = "funcionario")
@SequenceGenerator(name = "id_creator", sequenceName = "funcionario_id")
public class Funcionario implements java.io.Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "id_creator")
@Column(name = "id")
private Long id;
@Column(name = "nome", length = 100)
private String nome;
@OneToMany(cascade = {CascadeType.ALL})
@JoinColumn(name = "id_funcionario")
private Set<PermissaoFuncionario> permissoes;
}
PermissaoFuncionario.java
@Entity
@Table(schema = "public", name = "permissao_funcionario")
public class PermissaoFuncionario implements java.io.Serializable, Comparable<PermissaoFuncionario> {
@Id
@OneToOne
@JoinColumn(name = "id_permissao")
private Permissao permissao;
@Id
@ManyToOne
@JoinColumn(name = "id_funcionario")
private Funcionario funcionario;
}
A tabela no banco:
CREATE TABLE permissao_funcionario(
id_funcionario int8 NOT NULL,
id_permissao int8 NOT NULL,
CONSTRAINT pk_permissao_funcionario PRIMARY KEY (id_funcionario, id_permissao)
);
Desde já agradeço.