@ManyToOne association

package org.example.demo.hibernate;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.ForeignKey;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Persistence;

public class Test {
    public static void main(String[] args) throws Exception {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        EntityManager em = factory.createEntityManager();

        Person person = new Person();

        Phone phone = new Phone();
        phone.number = "123-456-7890";
        phone.person = person;

        em.getTransaction().begin();
        em.persist(person);
        em.persist(phone);
        em.flush();
        phone.person = null;
        em.getTransaction().commit();

        em.close();
        factory.close();
    }

    @Entity(name = "Person")
    public static class Person {
        @Id
        @GeneratedValue
        private Long id;
    }

    @Entity(name = "Phone")
    public static class Phone {
        @Id
        @GeneratedValue
        private Long id;

        @Column(name = "`number`")
        private String number;

        @ManyToOne
        @JoinColumn(name = "person_id", foreignKey = @ForeignKey(name = "PERSON_ID_FK"))
        private Person person;
    }
}

生成 SQL

alter table Phone drop constraint PERSON_ID_FK
drop table if exists Person cascade
drop table if exists Phone cascade
drop sequence if exists hibernate_sequence

create sequence hibernate_sequence start 1 increment 1
create table Person (id int8 not null, primary key (id))
create table Phone (id int8 not null, "number" varchar(255), person_id int8, primary key (id))
alter table Phone add constraint PERSON_ID_FK foreign key (person_id) references Person
select nextval ('hibernate_sequence')
select nextval ('hibernate_sequence')
insert into Person (id) values (1)
insert into Phone ("number", person_id, id) values ('123-456-7890', 1, 2)
update Phone set "number"='123-456-7890', person_id=NULL where id=2

results matching ""

    No results matching ""