Repeated column in mapping for entity

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 ?