이 모델이 있습니다 : 여기에 붙여 넣을 수 있습니다. 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);
많은 이미지와 연결된 모든 직원, 사용자, 도메인, 테넌트 정보를 얻습니다. 매우 느립니다 ... EmployeeLog의 단 1 행에 대해 다음과 같이 얻습니다.
[
{
"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를 수행 할 필요없이 원하는 필드와 원하지 않는 필드를 나타내는 간단한 방법이 있습니까?
1-json 뷰 주석 (더 유연함)
https://mkyong.com/java/jackson-jsonview-examples/ 또는 https://www.logicbig.com/tutorials/misc/jackson/json-view-annotation.html 또는 https://spring.io/blog / 2014 / 12 / 02 / latest-jackson-integration-improvements-in-spring
AllViews.java :
public class AllViews {
public interface List {}
public interface Edit {}
}
EmployeeLog.java :
@JsonView(AllViews.List.class)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@JsonView(AllViews.List.class)
@Column(name = "begin")
private ZonedDateTime begin;
@JsonView(AllViews.List.class)
@Column(name = "end")
private ZonedDateTime end;
@JsonView(AllViews.List.class)
@Column(name = "device_type")
private String deviceType;
@Column(name = "make")
private String make;
@JsonView(AllViews.List.class)
@Column(name = "model")
private String model;
@Column(name = "imei")
private String imei;
@JsonView(AllViews.List.class)
@Column(name = "serial_number")
private String serialNumber;
@JsonView(AllViews.List.class)
@Column(name = "ip_address")
private String ipAddress;
@Column(name = "mac_address")
private String macAddress;
@JsonView(AllViews.List.class)
@Column(name = "wifi_network")
private String wifiNetwork;
EmployeeLogResource :
@JsonView(AllViews.List.class)
@GetMapping("/nms-employee-logsByEmployeeId/{empId}")
public ResponseEntity<List<NmsEmployeeLog>> getResidentsByTenantId(final Pageable pageable,
@PathVariable final Long empId) {
log.debug("REST request to get a page of NmsEmployeeLog ByTenantId");
final Page<NmsEmployeeLog> page = nmsEmployeeLogRepository.findByEmpId(empId, pageable);
final HttpHeaders headers = PaginationUtil
.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
return ResponseEntity.ok().headers(headers).body(page.getContent());
}
결과:
[
{
"id": 6,
"begin": "2019-02-03T08:54:00+01:00",
"end": "2019-02-03T08:54:00+01:00",
"deviceType": some device,
"model": some model,
"serialNumber": xxxxx,
"ipAddress": xx.xx.xx,
"wifiNetwork": wifi
},
2- 또는 The Lazy Way (그다지 유연하지 않음)
나는 이것을 pom.xml에 추가하고 만듭니다 ./mvn clean compile
(나는 그것을 잊은 것 같습니다)
<plugin>
<groupId>org.hibernate.orm.tooling</groupId>
<artifactId>hibernate-enhance-maven-plugin</artifactId>
<version>${hibernate.version}</version>
<executions>
<execution>
<configuration>
<failOnError>true</failOnError>
<enableLazyInitialization>true</enableLazyInitialization>
</configuration>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
</plugin>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다