Dúvida Annotations hibernate

Bom tarde a todos!

Estou iniciando em "Hibernate" e estou com dificuldade para mapear o relacionamento "um para um" entre duas tabelas.

CREATE TABLE "empresa"(
   "id_empresa" int NOT NULL,
   "razao_social" varchar(80),
   "nome_fantasia" varchar(80),
   "cnpj" varchar(18),
   "id_endereco" int,
   "data_excluido" date,
   "excluido" int,
   "id_funcionario_exclusao" int,
   CONSTRAINT "pk_empresa" PRIMARY KEY ("id_empresa")
);

CREATE TABLE "endereco"(
   "id_endereco" int NOT NULL,
   "endereco" varchar(45),
   "bairro" varchar(45),
   "cidade" varchar(45),
   "estado" varchar(2),
   "cep" varchar(9),
   "complemento" varchar(50),
   "data_excluido" date,
   "excluido" int,
   "id_funcionario_exclusao" int,
   CONSTRAINT "pk_endereco" PRIMARY KEY ("id_endereco")
);

Onde a tabela empresa possui uma chave estrangeira "id_endereco" a qual referencia a tabela endereco
Minhas classes estão com as seguintes annotations:

–>Empresa


@Entity
@Table(name="empresa")
public class Empresa implements Serializable {

    @Id
    @Column(name="id_empresa")
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    private Integer idEmpresa;

    @Column(name="razao_social")
    private String razaoSocial;

    @Column(name="nome_fantasia")
    private String nomeFantasia;

    @Column(name="cnpj")
    private String cnpj;

    @Column(name="id_endereco")
    @OneToOne(cascade={CascadeType.ALL})
    @JoinColumn(name="id_endereco", insertable=false, updatable=false, table="endereco")
    private Endereco endereco;

    @Column(name="data_excluido")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataExcluido;

    @Column(name="excluido")
    private Integer excluido = 0;

    @Column(name="id_funcionario_exclusao")
    private Integer idFuncionarioExclusao = 0;

}

-->Endereço

[code]
@Entity
@Table(name="endereco")
public class Endereco implements Serializable {

    @Id
    @Column(name="id_endereco")
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    private Integer idEndereco;

    @Column(name="endereco")
    private String endereco;

    @Column(name="bairro")
    private String bairro;

    @Column(name="cidade")
    private String cidade;

    @Column(name="estado")
    private String estado;

    @Column(name="cep")
    private String cep;

    @Column(name="complemento")
    private String complemento;

    @Column(name="data_excluido")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataExcluido;

    @Column(name="excluido")
    private Integer excluido = 0;

    @Column(name="id_funcionario_exclusao")
    private Integer idFuncionarioExclusao = 0;
}
[/code]

Olá.

Se você quer realizar um mapeamento um para um, você não precisa criar uma chave estrangeira na tabela de empresas. Você pode relacionar as duas tabelas através de sua chave primária:

[code]@Entity
public class Empresa {
// …

@OneToOne
@PrimaryKeyJoinColumn
private Endereco endereco;

}[/code]Observe o uso da anotação @PrimaryKeyJoinColumn para indicar a associação entre as chaves primárias das duas tabelas.

Valeu tnaires!

Sem querer abusar da sua boa vontade, mas já o fazendo…vc já trabalhou com hibernate + postgresql, pois defini um campo chave do tipo “serial” e queria saber se o hibernate tem alguma annotation para esse tipo??

GenerationType.AUTO
GenerationType.IDENTITY
GenerationType.SEQUENCE
GenerationType.TABLE

Script tabela:

CREATE TABLE empresa
(
  id_empresa serial NOT NULL,
  razao_social character varying(80),
  nome_fantasia character varying(80),
  cnpj character varying(18),
  id_endereco integer,
  data_excluido date,
  excluido integer,
  id_funcionario_exclusao integer,
  CONSTRAINT pk_empresa PRIMARY KEY (id_empresa)
)

Quando trabalhei com Hibernate e PostgreSQL, eu realizava a autonumeração dos campos usando as sequences do banco de dados.

Primeiro, precisamos declarar na entidade a sequence:

@Entity @SequenceGenerator(name = "nomeSequence", sequenceName = "nomeSequenceBanco") public class Entidade { // ... }Onde “nomeSequence” pode ser o nome que você quiser, e “nomeSequenceBanco” deve ser o nome do objeto sequence no banco de dados.

Para usar, precisamos fazer assim:

@Id @GeneratedValue(generator = "nomeSequence") private int identificador;O nome a ser usado aqui é o definido no atributo “name” da anotação @SequenceGenerator.

valeu jovem!!

funcionou…estou tendo um novo problema e sem querer ser chato, estou penando para resolver o problema exposto no link:

http://www.guj.com.br/posts/preList/196526/984709.java#984709

Agradeço pela ajuda!