@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