You are on page 1of 4

Exemplo de relacionamento @OnetoOne Unidirecional, ou seja somente na classe cliente vou poder inserir um usuario.

package com; //Using the * to make the import list smaller import javax.persistence.*; @Entity @Table(name = "CUSTOMER") @SequenceGenerator(name = "CUSTOMER_SEQUENCE", sequenceName = "CUSTOMER_SEQUENCE", allocationSize = 1, initialValue = 0) public class Customer { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CUSTOMER_SEQUENCE") private int id; @Column private String name; @OneToOne(cascade = CascadeType.ALL, optional = false, fetch = FetchType.EAGER, orphanRemoval = true) // @JoinColumn(name="USER_ID", nullable=false) @PrimaryKeyJoinColumn private User user; //Getters and Setters }

////////////////////////////////////////////////////////////////////////////////////////////////////
package com; //Using the * to make the import list smaller import javax.persistence.*; @Entity @Table(name="USER") @SequenceGenerator(name="USER_SEQUENCE", sequenceName="USER_SEQUENCE", allocationSize=1, initialValue=0) public class User{ @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="USER_SEQUENCE") private int id; @Column private String login; @Column

private String password; // Getters and Setters }

Sobre os parmetros da anotao @OneToOne:


cascade define aes automatizadas no relacionamento, ex.: Ao apagar um Customer, apagar tambm um Usurio. Veremos sobre cascade em um post futuro. optional voc no ser obrigado a ter um User ao persistir um Customer, ou seja, voc no tem que criar um usurio para satisfazer essa condio (voc poder buscar o Customer no banco de dados, mas Customer.getUser() ter null como resposta). Com o valor igual a false, ao se cadastrar um Customer, obrigatria a presena de um User. Pode ser um User recm ainda no persistido.

fetch o valor padro EAGER. Ou seja, ao carregar o Customer j ser feita a consulta relacionada ao User de modo automtico. Iremos ver sobre esse assunto em um post futuro.

orphanRemoval define que uma entidade dependente, caso no tenha relacionamento, ser removida do banco de dados (em nosso modelo, User depende de Customer). Caso exista um User sem Customer, esse user ser removido.

Existem tambm duas anotaes sendo que uma delas est comentada:

// @JoinColumn(name=USER_ID, nullable=false) define qual a coluna mapeada para fazer a unio na consulta. indicado o nome da coluna atravs do parmetro name e que esse campo no pode ser nulo pelo parmetro nullable.

@PrimaryKeyJoinColumn essa anotao indica ao JPA que, para encontrar um objeto User basta procurar um registro com o mesmo ID do Customer. Ou seja, indica que um User vai ter o mesmo ID que seu Customer.

Para fazer um teste, execute o cdigo abaixo para ver que ser criado um User e um Customer; mesmo o comando de persist sendo executado apenas com o Customer:
package com; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main {

public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("Hello"); EntityManager em = emf.createEntityManager(); try { em.getTransaction().begin(); Customer customer = new Customer(); customer.setName("John Doe"); User user = new User(); user.setLogin("jDoe"); user.setPassword("123changeME!@#"); customer.setUser(user); em.persist(customer); em.getTransaction().commit(); } catch (Exception e) { em.getTransaction().rollback(); e.printStackTrace(); } finally{ emf.close(); } System.out.println("It is over"); } }

Realizando uma consulta, eu utilizei o mtodo find, voc ir encontrar o seguinte resultado:
package com; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("Hello"); EntityManager em = emf.createEntityManager(); try { em.getTransaction().begin();

Customer customer = em.find(Customer.class, 1); System.out.println(customer.getName()); System.out.println(customer.getUser().getLogin()); em.getTransaction().commit(); } catch (Exception e) { em.getTransaction().rollback(); e.printStackTrace(); } finally{ emf.close(); } System.out.println("It is over"); } }

You might also like