Давайте предположим, что у меня есть table
person
и у меня есть класс сущностей для него, с множеством полей, некоторые @Exposed
, некоторые @Transient
, некоторые @Temporal
столбцы. Проблема в том, что загрузка n Person
элементов занимает много времени, потому что для каждой записи есть некоторые поля, которые снижают производительность.
В качестве идеи для оптимизации я создал класс PersonSimplified
, определяющий все элементыPerson
, кроме "медленных" полей и методов. Все работало безукоризненно, но, к сожалению, это решение не очень элегантно, потому что такие вещи, как name
, переопределены, а дублирование кода - путь к катастрофе. Моя идея состоит в том, чтобы обеспечить Person extends PersonSimplified
, но не могу понять, как это сделать. У меня есть три важных класса, я дам их скелет здесь:
BaseEntity.java
@MappedSuperclass
@EntityListeners({BaseEntityListener.class})
public abstract class BaseEntity implements Cloneable {
//Some fields and methods
}
PersonSimplified.java
@SuppressWarnings("serial")
@Entity(name="PersonSimplified")
@Table(name="person")
@Inheritance(strategy=InheritanceType.JOINED)
public class PersonSimplified extends BaseEntity implements Auditable, Serializable {
//Lots of stuff
}
Person.java
@SuppressWarnings("serial")
@Entity(name="Person")
@Table(name="person")
@Inheritance(strategy=InheritanceType.JOINED)
public class Person extends PersonSimplified implements Auditable, Serializable {
//Some slow stuff
}
Я получаю ошибку:
Зависимость цикличности внешнего ключа, включающая следующие таблицы: person, person
Однако я не собираюсь иметь какие-либо внешние ключи. Я хотел бы только реорганизовать код, чтобы гарантировать, что когда мне понадобится упрощенный человек, он будет доступен, когда он мне нужен вместе с медленными полями, тогда я смогу добиться этого и мне не придется дублировать мой код. Как мне этого добиться?