[JPA] @OneToOne, 1:1 관계 매핑

2020. 9. 7. 12:47 Java 관련/JPA
 

Table 관계도

 

Entity

@Entity
public class Person {
 
    @Id
    @GeneratedValue
    private int id;
 
    private String name;
 
    @OneToOne
    @JoinColumn(name = "cellular_id")
    private Cellular cellular;
 
    public Person() {}
 
    public Person(String name, Cellular cellular) {
        this.name = name;
        this.cellular = cellular;
    }
 
    // getter and setter   
 
    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", cellular=" + cellular +
                '}';
    }
}
 
@Entity
public class Cellular {
 
    @Id
    @GeneratedValue
    private int id;
 
    private int number;
 
    public Cellular() {}
 
    public Cellular(int number) {
        this.number = number;
    }
     
    // getter and setter
 
    @Override
    public String toString() {
        return "Cellular{" +
                "id=" + id +
                ", number=" + number +
                '}';
    }
}

TEST

public class OneToOneTest {
 
    @Autowired
    private EntityManagerFactory entityManagerFactory;
    private EntityManager entityManager;
 
    @Test
    public void oneToOneTest() {
        Cellular cellular = new Cellular();
        cellular.setNumber(521);
        entityManager.persist(cellular);
 
        Person person = new Person();
        person.setName("woniper");
        person.setCellular(cellular);
        entityManager.persist(person);
 
        Assert.assertEquals(person.getCellular().getId(), cellular.getId());
    }
 
    @Before
    public void setUp() throws Exception {
        entityManager = entityManagerFactory.createEntityManager();
        entityManager.getTransaction().begin();
    }
 
    @After
    public void after() {
        entityManager.getTransaction().commit();
        entityManager.close();
    }
}

출처 : https://blog.woniper.net/263?category=531455