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;