Boa noite, estou tendo problemas com com mapeamento do Hibernate. Esta ocorrendo a seguinte exceção. Repeated column in mapping for entity: br.com.vendaslim.entity.Usuario column: IDEMPRESA (should be mapped with insert=“false” update=“false”)
Se eu setar insert=false, resolve o problema da exceção, porém não persiste o id da empresa nem da filial na tabela do Usuario. E não é isso que preciso. Eu acho que os meus mapeamentos não estão certos.
Empresa.java
@Entity
@Table(name="EMPRESA")
public class Empresa {
@Id
private Integer idEmpresa;
}
FilialID.java
@Embeddable
public class FilialID implements Serializable{
@ManyToOne
@JoinColumn(name="IDEMPRESA")
@ForeignKey(name="fk_filial_empresa")
private Empresa empresa;
@Column(name="IDFILIAL")
private Integer idFilial;
}
Filial.java
@Entity
@Table(name="FILIAL")
public class Filial implements Serializable{
@EmbeddedId
private FilialID filialID;
}
RepresentanteID.java
@Embeddable
public class RepresentanteID implements Serializable{
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns(
{
@JoinColumn(name="idempresa"),
@JoinColumn(name="idfilial")
}
)
@ForeignKey(name="FK_FILIAL_REPRESENTANTE")
private Filial filial;
@Column(name="idrepresentante")
private Integer idRepesentante;
}
Representante.java
@Entity
@Table(name="REPRESENTANTE")
public class Representante {
@EmbeddedId
private RepresentanteID representanteID;
}
E por fim a classe que esta me ocorrendo o problema
Usuario.java
@Entity
@Table(name="USUARIO", uniqueConstraints={
@UniqueConstraint(columnNames={"LOGIN"}, name="UK_USUARIO_LOGIN")})
public class Usuario implements Serializable{
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer idUsuario;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({@JoinColumn(name="IDEMPRESA", nullable=false), @JoinColumn(name="IDFILIAL",nullable=false)})
public Filial filial;
@OneToOne(optional= true, fetch= FetchType.EAGER)
@JoinColumns(
{
@JoinColumn(name="IDEMPRESA"),
@JoinColumn(name="IDFILIAL"),
@JoinColumn(name="IDREPRESENTANTE"),
}
)
@ForeignKey(name="FK_USUARIO_REPRESENTANTE")
public Representante representante;
}
Irei encontrar esse problema em todas as minhas entidads pois todas elas terei que ter esse atributo Filial,
que no meu ver, é necessario, porque serão varias empresas que utilizarão o sistema, então preciso sempre identificar pela empresa os seus registros, (USUARIOS, CLIENTES, GRUPOS,…).
Ex Empresa 1 (Volkswagen) - Filial 1 (Revendedora Curitiba)- pode ter n Usuários, n Representantes, n Clientes …
Empresa 2 (Fiat) - Filial 1 (Revendedora São Paulo) - pode ter n Usuários, n Representantes, n Clientes …
Empresa 2 (Fiat) - Filial 2 (Rio de Janeiro) - pode ter n Usuários, n Grupos, n Representantes, n Clientes …
Com certeza a estrategia de mapeamento ou arquitetura de banco não esta correta. Alguém pode me auxiliar por favor ?