Есть ли способ использовать общий встраиваемый объект в режиме гибернации?

#java #hibernate #jpa

#java #переход в режим гибернации #jpa

Вопрос:

У меня ситуация с повторяющимися полями класса, которые я хочу пометить как @embeddable , однако вопрос в том, позволяет ли JPA повторно использовать класс несколько раз как встраиваемый в другие разные классы?

Например, мой встраиваемый класс выглядит следующим образом:

 @Embeddable
@Data
public class Audit{
private String name;
private Audit auditor;
private LocalDateTime creationDate;
}
  

Возможно ли встроить аудит в несколько разных классов, например.:

     @Entity
    @Table(name = "BANK")
    public class Bank{
   
    @Id
    private Long id;
    
    @Column(name = "BANK_NAME")
    private String bankName;
    
    @Embedded
    private Audit audit;
    }
  

И

  @Entity
    @Table(name = "CORPORATION")
    public class Corporation{
   
    @Id
    private Long id;
    
    @Column(name = "CORPORATION_NAME")
    private String corporationName;
    
    @Embedded
    private Audit audit;
    }
  

Комментарии:

1. Почему бы не попробовать это?

Ответ №1:

Исторически Hibernate вызывал эти компоненты. JPA называет их встраиваемыми файлами. В любом случае концепция одна и та же: композиция значений.

Чаще всего встраиваемые типы используются, чтобы сгруппировать несколько сопоставлений базовых типов и повторно использовать их в нескольких объектах.

Пример кода Java:

 @Data
@Entity(name = "Book")
public class Book {

    @Id
    @GeneratedValue
    private Long id;

    private String title;

    private String author;

    private Publisher publisher;

}

@Data
@Embeddable
public static class Publisher {

    @Column(name = "publisher_name")
    private String name;
    @Column(name = "publisher_country")
    private String country;

}
  

И это SQL, чтобы показать, как должна выглядеть ваша таблица:

 create table Book (
    id bigint not null,
    author varchar(255),
    publisher_country varchar(255),
    publisher_name varchar(255),
    title varchar(255),
    primary key (id)
)
  

Более подробную информацию можно найти в документации 🙂