#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)
)
Более подробную информацию можно найти в документации 🙂