Классы с JPA @MappedSuperclass используют много памяти - PullRequest
0 голосов
/ 15 апреля 2020

В нашем проекте используются микроуслуги и JPA.

Чтобы централизованно управлять моделями БД и делиться моделями с каждой службой, мы определили каждую модель как абстрактный класс с аннотацией @MappedSuperclass и собрали их в отдельную банку. Каждый сервис может импортировать эту банку и использовать нужные ей модели.

В этой банке содержится около 400 моделей.

Мы обнаружили, что:

  • Если служба импортирует эту модель jar, ей потребуется дополнительная 600MB память после запуска.
  • Если я удалю этот jar или удалим все @MappedSuperclass, использование памяти будет нормальным после запуск.

Сервис использует пружинную загрузку 1.5.13.RELEASE и eclipselink 2.7.4 / 2.7.6. eclipselink.weaving равен stati c.

Я не знаю, почему эти модели были загружены в память и кто выполнял эту загрузку, хотя они не используемый.

И как решить эту проблему. Или у вас есть какие-либо предложения?

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Пример пользователя в модели jar:

@MappedSuperclass
public abstract class User
{
    @Id
    @GeneratedValue(generator = "system-uuid")
    @Column(name = "\"GUID\"", updatable = false, nullable = false)
    private String guid;

    @Column(name = "\"Name\"", nullable = false)
    private String name;

    @Column(name = "\"Age\"")
    private Integer age;

    public String getGuid()
    {
        return guid;
    }

    public void setGuid(String guid)
    {
        this.guid = guid;
    }

    ......
}

Сервис использует лайки этой модели пользователя

@Entity
@Table(name = "T_ADMIN_USER")
public class AdminUser extends User
{
     ....
}
...