У меня есть эта модель: Вы можете вставить ее здесь https://start.jhipster.tech/jdl-studio/
entity NmsDomain {
name String required,
logo ImageBlob,
brandImg ImageBlob
}
entity NmsTenant {
name String required,
image ImageBlob
}
entity NmsZone {
name String required,
description String,
active Boolean,
lastModifiedDate ZonedDateTime,
lastModifiedBy String
}
entity NmsEmployee {
extensionNumber String,
photo ImageBlob
}
entity NmsEmployeeLog {
begin ZonedDateTime,
end ZonedDateTime,
deviceType String,
make String,
model String,
imei String,
serialNumber String,
ipAddress String,
macAddress String,
wifiNetwork String
}
relationship OneToOne {
NmsEmployee{user(firstName)} to User
}
relationship ManyToMany {
NmsEmployee{possibleZones(name)} to NmsZone{employeePossible},
NmsEmployee{activeZones(name)} to NmsZone{employeeActive},
NmsEmployee{possibleTenants(name)} to NmsTenant{employeePossible},
NmsDomain{user(firstName)} to User{NmsDomain}
}
relationship ManyToOne {
NmsEmployeeLog{employee} to NmsEmployee,
NmsEmployeeLog{zone(name)} to NmsZone,
NmsEmployee{domain(name)} to NmsDomain,
NmsEmployee{tenant(name)} to NmsTenant,
NmsTenant{domain(name)} to NmsDomain,
NmsZone{tenant(name)} to NmsTenant
}
EmployeeLog. java:
@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnoreProperties("nmsEmployeeLogs")
private NmsEmployee employee;
@ManyToOne
@JsonIgnoreProperties("nmsEmployeeLogs")
private NmsZone zone;
EmployeeLogRepository:
@Query(value ="SELECT entity FROM NmsEmployeeLog entity WHERE entity.employee.id = :empId",
countQuery ="select count(entity) FROM NmsEmployeeLog entity WHERE entity.employee.id = :empId")
Page<NmsEmployeeLog> findByEmpId(@Param("empId") Long empId, Pageable pageable);
Я получаю всю информацию о сотрудниках, пользователях, доменах и арендаторах, связанную с большим количеством изображений. Очень медленно ... только для 1 строки в EmployeeLog я получаю:
[
{
"id": 6,
"begin": "2019-02-03T07:54:00Z",
"end": "2019-02-03T07:54:00Z",
"deviceType": null,
"make": null,
"model": null,
"imei": null,
"serialNumber": null,
"ipAddress": null,
"macAddress": null,
"wifiNetwork": null,
"employee": {
"id": 11,
"extensionNumber": "1223",
"photo": "iVBORw0KGgoAAAANSUhEUg ….LOTS OF IMAGE CODE.”,
"photoContentType": "image/png",
"user": {
"id": 3,
"login": "admin",
"firstName": "Admin",
"lastName": "IGomes",
"email": “m…”,
"activated": true,
"langKey": "pt-pt",
"imageUrl": "",
"resetDate": null
},
"domain": {
"id": 2,
"name": "Fe ",
"logo": "/9j/4 ….LOTS OF IMAGE CODE”,
"brandImgContentType": "image/jpeg",
"brandLink": null
},
"tenant": {
"id": 4,
"name": "Heathlands V",
"image": “LOTS OF IMAGE CODE…..”,
"imageContentType": "image/jpeg",
"domain": {
"id": 2,
"name": "Feds ",
"logo": "/9j/4A== ….”,
"logoContentType": "image/jpeg",
"brandImg": "/9j/4AAQSkAAH//Z …..LOTS OF IMAGE CODE”,
"brandImgContentType": "image/jpeg"
}
},
"possibleZones": null,
"activeZones": null,
"possibleTenants": null
},
"zone": {
"id": 27,
"name": "EHBlk EH1",
"description": "EH Block 1",
"active": true,
"lastModifiedDate": "2019-09-28T11:39:32Z",
"lastModifiedBy": "Louis ",
"tenant": {
"id": 4,
"name": "Heathlands V",
"image": "/9j/4AAQSkZJRgABAQAAA …. LOTS OF IMAGE CODE”,
"imageContentType": "image/jpeg",
"domain": {
"id": 2,
"name": "Fed ",
"logo": LOTS OF IMAGE CODE….”,
"brandImgContentType": "image/jpeg",
}
}
}
},
{
Next Row Log ...
вместо только этих полей:
public interface EmployeeLog {
Long getId();
ZonedDateTime getBegin();
ZonedDateTime getEnd();
String getDevice();
String getType();
String getMake();
String getModel();
String getImei();
String getSerialNumber();
String getIpAddress();
String getMacAddress();
String getWifiNetwork();
}
Если я создаю интерфейс или DTO и выбираю просто эти поля. Это работает: я не получаю ничего лишнего.
Но мне нужно сделать это для большинства сущностей ...
Есть ли способ указать ленивую нагрузку в сущность?
Или какой-то простой способ указать поля, которые я хочу, и те, которые мне не нужны, без необходимости делать DTO для всех сущностей?