У меня возникла проблема с JPA, когда я получаю много дополнительных данных, которые мне не нужны, а также много моих запросов.Я знаю, что могу обойти это, возвращая DTO в своих запросах, но потом я направляю полезность JPA, поэтому мне было интересно, есть ли лучший способ решить эту проблему.
Например, у меня есть два класса.Один называется Товар, а другой - Поставщик.Элемент продукта, может иметь поставщика как ManyToOne
Отношения.Когда я делаю запрос на получение товара, мне не нужен адрес поставщика.Мне просто нужно имя и удостоверение личности.Однако, когда я делаю запрос на получение от поставщика, мне нужна вся информация, связанная с поставщиком.Есть ли способ указать это помимо простого возврата DTO без этой информации?
ProductItem.java
@Entity
public class ProductItem {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@ManyToOne
private Organization org;
@ManyToOne
private Supplier supplier;
private String barCode;
private String description;
private String name;
private Integer stock;
private Integer caseQty;
private BigDecimal caseCost;
@ManyToMany(cascade=CascadeType.ALL)
private List<Note> notes;
@CreationTimestamp
private LocalDateTime createdOn;
@UpdateTimestamp
private LocalDateTime updatedOn;
Supplier.java
@Entity
public class Supplier {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(cascade=CascadeType.ALL)
private List<Note> notes;
@ManyToOne(cascade=CascadeType.ALL)
private Address address;
@ManyToOne
private Organization org;
Текущее получение http://localhost:8080/productitem/1
{
"id": 1,
"org": {
"id": 1,
"name": "Test",
"address": {
"name": "Test"
},
"website": null,
"phone": null
},
"supplier": {
"id": 1,
"name": "Sams Club",
"notes": [],
"address": {
"name": "Test"
},
"org": {
"id": 1,
"name": "Test",
"address": {
"name": "Test"
},
"website": null,
"phone": null
}
},
"barCode": "UPC134",
"description": "This is description. This is description. This is description. This is description. ",
"name": "Sunchips",
"stock": 10,
"caseQty": 34,
"caseCost": 29.99,
"notes": [
{
"id": 1,
"title": "Product Item Created",
"description": "Note created by user X on 12/16/2019 11:00PM"
},
{
"id": 2,
"title": "Product Item Updated",
"description": "Product ITem updated stock by user X on 12/16/2019 11:00PM"
}
],
"createdOn": "2019-02-28T13:44:39",
"updatedOn": "2019-02-28T13:44:39"
}
Попытка достичь Get http://localhost:8080/productitem/1
{
"id": 1,
"org": {
"id": 1,
"name": "Test",
"address": null,
"website": null,
"phone": null
},
"supplier": {
"id": 1,
"name": "Sams Club",
},
"barCode": "UPC134",
"description": "This is description. This is description. This is description. This is description. ",
"name": "Sunchips",
"stock": 10,
"caseQty": 34,
"caseCost": 29.99,
"notes": [
{
"id": 1,
"title": "Product Item Created",
"description": "Note created by user X on 12/16/2019 11:00PM"
},
{
"id": 2,
"title": "Product Item Updated",
"description": "Product ITem updated stock by user X on 12/16/2019 11:00PM"
}
],
"createdOn": "2019-02-28T13:44:39",
"updatedOn": "2019-02-28T13:44:39"
}
Попытка достижения/ Current Get http://localhost:8080/supplier/1
{
"id": 1,
"name": "Sams Club",
"notes": [],
"address": {
"name": "Test"
},
"org": {
"id": 1,
"name": "Test",
"address": null,
"website": null,
"phone": null
}