JPA mapeamento

1 resposta
D

Tenho duas tabelas:

// Tabela Fonecedor
CREATE TABLE 'fornecedor(idint(10) unsigned NOT NULL auto_increment,nomevarchar(45) NOT NULL default '', PRIMARY KEY (id`)
);

// Tabela endereco
CREATE TABLE endereco (
id_fornec int(10) unsigned NOT NULL default ‘0’,
rua varchar(45) NOT NULL default ‘’,
PRIMARY KEY (id_fornec),
CONSTRAINT FK_ender_1 FOREIGN KEY (id_fornec) REFERENCES fornecedor (id) ON DELETE CASCADE ON UPDATE CASCADE
);

// Objeto Fornecedor
@Entity
public class Fornecedor implements Serializable {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name = id, nullable = false)

private Integer id;

@Column(name = “nome”, nullable = false)
private String nome;

@OneToOne(cascade = CascadeType.ALL, mappedBy = “fornecedor”)
private Endereco endereco;

// Objeto Endereco
@Entity
public class Endereco implements Serializable {

@Id

@Column(name = id_fornec, nullable = false)

private Integer idFornec;

@Column(name = “rua”, nullable = false)
private String rua;

@JoinColumn(name = id_fornec, referencedColumnName = id, insertable = false, updatable = false)

@OneToOne

private Fornecedor fornecedor;

Quando vou persistir o objeto Fornecedor pela primeira vez (insert) uma exceptions e gerada dizendo, que o id_fornec nao pode ser nulo, ou seja o JPA nao esta usando automaticamente o ID gerado pelo fornecedor para definir a FK automaticamente. Ele espera que eu setId_fornec manualmente.
Eu não estou conseguindo fazer uma anotação para que ele peque a Pk criada pelo mysql e crie o endereço setando a FK com esta PK automaticamente.
Estou trabalhando com NetBeans e JPA (TopLink Essentials).
Alguem pode me ajudar?

1 Resposta

W
Faz um teste ai troque o  private Integer idFornec;

por

private int idFornec;

assim vc garante um o id nunca será nulo.

Para criar o endereço vc deverá setar o cascade. Tenta com o
cascade = { CascadeType.ALL }

Criado 23 de março de 2007
Ultima resposta 24 de mar. de 2007
Respostas 1
Participantes 2