OneToOne onde PrimaryKey é ForeignKey

5 respostas
J

Amigos, sei q tem um topico falando disso de 2009, mas n consegui implementar pq o meu codigo n aceita a utilizacao da annotation @GenericGenerator

Enfim, tenho uma tabela que tem relacao OneToOne com outra, onde a foreign key é tb a primary key
Como devo realizar o mapeamento delas?

Estou fazendo assim:

@Entity
@Table(name = "cadastro_geral")
@SequenceGenerator(name="SEQ_ID_CADASTROGERAL", sequenceName="cadastro_geral_id_cadastro_geral_seq")
public class CadastroGeral implements Serializable {
    private static final long serialVersionUID = 2L;

    @Id
    @Basic(optional = false)
    @Column(name = "id_cadastro_geral")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_ID_CADASTROGERAL")
    private Integer idCadastroGeral;

    @Basic(optional = false)
    @Column(name = "rg")
    private long rg;

    @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="CadastroGeral")
    private CadastroDetalhe cadastroDetalhe ;
@Entity
@Table(name = "cadastro_detalhe")
public class CadastroDetalhe implements Serializable {
    private static final long serialVersionUID = 2L;
    @Id
    @Basic(optional = false)
    @Column(name="fk_cadastro_geral")
    private Integer fkCadastroGeral;

    @OneToOne(optional=false)
    @PrimaryKeyJoinColumn(name = "fk_cadastro_geral", referencedColumnName="id_cadastro_geral")
    private CadastroGeral cadastroGeral ;

Como é que devo mapear para que na inclusão, essa tabela CadastroDetalhe obtenha o mesmo ID, automaticamente, da tabela mãe CadastroGeral?

Agradeço a todos que, de qualquer forma, puderem me ajudar.

Obrigado. :smiley:

5 Respostas

paulo1911

Olá amigo,

Vc ja esperimentou utilizar a anotation da seguinte forma:

@OneToOne(targetEntity=SuaClasse.class,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
	@JoinColumn(name="nome_da_coluna")

Fallow

J

Onde? em qual das classes?

Vlw

paulo1911:
Olá amigo,

Vc ja esperimentou utilizar a anotation da seguinte forma:

@OneToOne(targetEntity=SuaClasse.class,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
	@JoinColumn(name="nome_da_coluna")

Fallow

J

Explicando de outro modo.

O que eu preciso é que a chave primaria da tabela detalhe assuma o mesmo valor da chave primaria da tabela geral.

leo_mf

Tenta isso, rapaz

@Id @Column(name = "id_cadastro_gera", length = 10, precision = 0) private Long id; @OneToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "id_cadastro_gera", insertable = false, updatable = false) private CadastroDetalhe cadastroDetalhe;

Deve funcionar.

Uma dica para trabalhar com JPA:
É só se lembrar que você não está trabalhando com banco orientado a objetos. A maioria das pessoas comete esse erro.

J

Não consegui mapear com OneToOne usando eclipseLink, quando PrimaryKey = ForeignKey.

Tive que criar uma chave primaria na tabela filha, sem necessidade, pra poder atrelar uma sequence a ela e não dar o erro de chave nula.

E o campo que era chave estrangeira E PRIMARIA na tabela filha, passou a ser APENAS ESTRANGEIRA com constraint UNIQUE no banco de dados.

Obrigado a todos.

Criado 25 de novembro de 2010
Ultima resposta 29 de nov. de 2010
Respostas 5
Participantes 3