embeddable types 通常用于将多个 basic type 组合在一起,用在多个 Entity 中。

两个注解

  • @javax.persistence.Embeddable - 定义 embeddable types
  • @javax.persistence.Embedded - 在 Entity 中引用 embeddable types
package org.example.demo.hibernate;

import javax.persistence.Embeddable;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Persistence;

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

        em.getTransaction().begin();
        Person person = new Person();
        person.name = new Name();
        person.name.firstName = "Bruce";
        person.name.lastName = "Lee";
        em.persist(person);
        em.getTransaction().commit();

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

    @Entity(name = "Person")
    public static class Person {
        @Id
        @GeneratedValue
        Integer id;
        @Embedded
        Name name;
    }

    @Embeddable
    public static class Name {
        String firstName;
        String lastName;
    }
}

生成 SQL

drop table if exists Person cascade
drop sequence if exists hibernate_sequence

create sequence hibernate_sequence start 1 increment 1
create table Person (id int4 not null, firstName varchar(255), lastName varchar(255), primary key (id))
select nextval ('hibernate_sequence')
insert into Person (firstName, lastName, id) values ('Bruce', 'Lee', 1)

Composition is part of good OO data modeling (idiomatic Java).

所以 embeddable 只是对于 java 来说的,对于 db 没有区别。

results matching ""

    No results matching ""