JPA mapeamento

2 respostas
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?

2 Respostas

javaBeats

Hmmm…

No código onde você persiste o objeto, certifique-se de ter efetuado a associação!

endereco.setFornecedor( ... );

My two cents…

D

Mas foi feita…

EntityManagerFactory factory = Persistence.createEntityManagerFactory(TesteJPAPU);

EntityManager em = factory.createEntityManager();

Fornecedor f = new Fornecedor();

f.setNome(FORNECEDOR);

Endereco e = new Endereco();

e.setRua(RUA TESTE);

f.setEndereco(e);

em.getTransaction().begin();

em.persist(f);

em.getTransaction().commit();
Criado 23 de março de 2007
Ultima resposta 23 de mar. de 2007
Respostas 2
Participantes 2