Есть таблица на 30 и более полей. Я хочу разделить данную таблицу на несколько классов и в каждом классе по 5 полей, чтобы удобней было работать. Создаю абстрактные классы, которые наследуются друг от друга. И последний класс будет иметь статус «produce».
@MappedSuperclass
public abstract class OneBaseAbstract {
@Id
@Column(name = "ID_ISX", nullable = false, updatable = false)
private Long id;
private String name;
public OneBaseAbstract() {
}
/*
getters
setters*/
/ *
equals and hashCode
*/
@Override
public String toString() {
return "OneBaseAbstract{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
public abstract class TwoBaseAbstract extends OneBaseAbstract{
private Integer num;
private String mark;
public TwoBaseAbstract() {
super();
}
/*
getters
setters*/
/ *
equals and hashCode
*/
@Override
public String toString() {
String superString = super.toString();
return superString + "TwoBaseAbstract{" +
"num=" + num +
", mark='" + mark + '\'' +
'}';
}
}
@Entity
@Table(name = "name_table")
public class Produce extends TwoBaseAbstract {
private String name;
private String product;
public Produce() {
super();
}
/*
getters
setters*/
/ *
equals and hashCode
*/
@Override
public String toString() {
String superString = super.toString();
return superString + "Produce{" +
"name='" + name + '\'' +
", product='" + product + '\'' +
'}';
}
}
public interface ProduceRepository
extends CrudRepository<Produce,Long> {
}
Абстрактных промежуточных классов будет столько, сколько нужно чтобы разделить таблицу. Например, я использую по 5 полей для каждого класса.
Производный класс будет вызываться, чтобы сформировать единую сущность и заполнить поля, которые будут сопоставлены в таблицу.
Правильно ли я применил подход, и нужно ли указать аннотацию @MappedSuperclass на промежуточных абстрактных классов ?
Я ее указал для каждого промежуточного абстрактного класса.
И это работает. Тип генерации Id не указывал, так как для этой таблице в oracle стоит триггер, который при вставке новой записи, автоматически формирует id.
Как в этом случае работает вычисление hash code и работа equals для полностью готового объекта?
Я использую для конвертации mapstruct, я должен аналогичную структуру создать на стороне DTO ?
Как будет работать Builder, если его создать в каждом классе отдельно то же?
Oбновление
Использовал плагин InnerBuilder в классе-производителе на стороне DTO автоматически сгенерировал нужные поля. Для конвертации между DTO и Entity настроен MapStruct по умолчанию (когда объявлен интерфейс Mapstuct, не забывайте выполнить сборку проекта, чтобы потом можно было вызывать конвертер в коде )
Можно объединить логические группы полей в отдельные классы, но мапить все в одну таблицу с помощью аннотации @Embedded
Довольно неплохо это продемонстрировано здесь
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я Java изучаю только месяц и никак не могу понять, как правильно отправить audio, файл кодируется в base64 не верно и файл на сервере не открываетсяКак...
Для автоматической генерации id записи в базу oracle, используется встроенный триггер, ранее использовалась последовательность
как скрыть #fp-nav, когда гамбургер активен, и показать снова, когда гамбургер закрыт циклично? Я набросал немного и сделал функцию, она выполняет...