Para isso vamos usar as seguintes anotações que tratam as cardinalidades:
@OneToOne
@OneToMany
@ManyToOne
e tem a @ManyToMany que ficará para uma próxima postagem!
No pacote model vamos criar as classes: Endereco.java, Categoria.java, Dependente.java e alterar a Cliente.java.
Começando...
Endereco.java
@Entity
@Table(name = "endereco")
public class Endereco implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "codigo", nullable = false)
private Integer codigo;
@Column(name = "rua")
private String rua;
@Column(name = "cidade")
private String cidade;
@Column(name = "estado")
private String estado;
@OneToOne(mappedBy="endereco", fetch=FetchType.LAZY)
private Cliente cliente;
//Getters e Setters
//equals e hashCode
}
Cliente.java
@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "codigo", nullable = false)
private Integer codigo;
@Column(name = "nome")
private String nome;
@Column(name = "data_nascimento")
@Temporal(TemporalType.DATE)
private Date dataNascimento;
@Column(name = "limite")
private Double limite;
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "endereco_codigo", nullable = false)
private Endereco endereco;
@OneToMany(mappedBy = "cliente", fetch = FetchType.LAZY)
private List< Dependente > dependenteList;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "categoria_codigo", nullable = false)
private Categoria categoria;
//getters e setters
//equals e hashCode
}
Categoria.java@Entity
@Table(name = "categoria")
public class Categoria implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "codigo", nullable = false)
private Integer codigo;
@Column(name = "nome")
private String nome;
@OneToMany(mappedBy = "categoria", fetch = FetchType.LAZY)
private List< Cliente > clienteList;
//getters e setters
//equals e hashCode
}
Dependente.java@Entity
@Table(name = "dependente")
public class Dependente implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "codigo", nullable = false)
private Integer codigo;
@Column(name = "nome")
private String nome;
@Column(name = "cpf")
private String cpf;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "cliente_codigo", nullable = false)
private Cliente cliente;
//getters e setters
//equals e hashCode
}
e por fim como ficou nosso persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="TesteJPAPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>5tads</jta-data-source>
<class>model.Cliente</class>
<class>model.Endereco</class>
<class>model.Categoria</class>
<class>model.Dependente</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>
</persistence>
É isso aí! :)

Oi Andi! Estou tendo problemas na criação dos controladores JPA das classes que possuem anotações @onetomany e @manytomany. No caso estou fazendo um cadastro de alunos e telefones. O aluno pode ter vários telefones. Pelo Netbeans gero minhas entidades e o controlador JPA para fazer a inserção no banco porém não obtenho sucesso. Você poderia me dar uma mãozinha? Desde já agradeço! Abraços!
ResponderExcluirOlá Vanessa! Teria como vc dizer exatamente qual o problema que está ocorrendo? Ele dá algum erro?
ResponderExcluirOLa estou tendo o problema com ManytoOne, não estou conseguindo inserir em uma tabela, da o seguinte erro: Collum 'cod_UF' cannot be null
ResponderExcluirNa tabela UF usei a anotação: @OneToMany(mappedBy="uf")
private Collection cidades;
Na tabela Cidade usei: @ManuyToOne
@JoinCollum (name=cod_UF")
private UF uf;