회사에 사용자 목록이 있고 초기화되지 않았기 때문에 조인 가져 오기 쿼리를 사용하여 productSLA와 함께 회사를 가져옵니다. 따라서 responseentity.ok를 사용하여 응답을 보내면 지연 초기화 예외가 발생합니다. 나는 그 목적을 위해 사용자 목록을 원하지 않는다. 프론트 엔드에 게으른 초기화 예외를 보내지 않고서 그것을 보낼 수있는 방법이있다. 어떤 것은 내가 이것을 dto를 사용하여 할 것을 제안했다.지연 가져 오기 요소
프런트 엔드에 각도를 사용하고 있습니다. 내가 jsp를 사용할 때 나는 이런 종류의 문제에 직면하지 않았다.
@Entity
@Table(name = "USER_TABLE")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer userId;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL,fetch=FetchType.EAGER)
private List<Ticket> raisedTickets;
@NotNull
@Column(unique = true)
@Email(message = "Invalid Email")
private String email;
@NotNull
@Column
@Length(min = 4, max = 12, message = "First name must be between 4 to 12 character long")
private String firstName;
@NotNull
@Column
@Length(min = 4, max = 12, message = "Last name must be between 4 to 12 character long")
private String lastName;
@NotNull
@Column
@Length(min = 8, max = 100, message = "Password must be 4 to 12 character long")
private String password;
@NotNull
@Column
@Length(min = 3, max = 30, message = "Company Name must be between 3 to 12 character long")
private String companyName;
@Column(name = "USER_ROLE")
@Enumerated(EnumType.STRING)
private UserRolesEnum userRole;
@ManyToOne
@JoinColumn(name = "COMPANY_ID", nullable = false)
@NotNull
private Company company;
@OneToMany(mappedBy="user", cascade=CascadeType.ALL)
private List<ProductAssociated> productAssociatedList=new ArrayList<ProductAssociated>();
public User() {
}
public User(String firstName, String lastName, String email, String password, String companyName,
UserRolesEnum role) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.password = password;
this.companyName = companyName;
this.userRole = role;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer id) {
this.userId = id;
}
public List<Ticket> getRaisedTickets() {
return raisedTickets;
}
public void setRaisedTickets(List<Ticket> raisedTickets) {
this.raisedTickets = raisedTickets;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public UserRolesEnum getUserRole() {
return userRole;
}
public void setUserRole(UserRolesEnum userRole) {
this.userRole = userRole;
}
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
public List<ProductAssociated> getProductAssociatedList() {
return productAssociatedList;
}
public void setProductAssociatedList(List<ProductAssociated> productAssociatedList) {
this.productAssociatedList = productAssociatedList;
}
public void addProductAssociated(ProductAssociated productAssociated) {
productAssociatedList.add(productAssociated);
productAssociated.setUser(this);
}
@Entity
@Table(name="PRODUCT_SLA")
public class ProductSLA {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="SLA_ID")
private Integer slaId;
@NotNull
@Column(name="RESPONSE_TIME")
private int responseTime;
@Column(name="RESOLVE_TIME")
private int resolveTime;
@NotNull
@Column(name="PRIORITY")
@Enumerated(EnumType.STRING)
private PriorityEnum priority;
@ManyToOne
@JoinColumn(name="COMPANY_ID", nullable = false)
private Company company;
@ManyToOne
@JoinColumn(name="PRODUCT_ID", nullable = false)
private Product product;
public ProductSLA() {
super();
}
public ProductSLA(Integer slaId, int responseTime, int resolveTime, PriorityEnum priority) {
super();
this.slaId = slaId;
this.responseTime = responseTime;
this.resolveTime = resolveTime;
this.priority = priority;
}
public Integer getSlaId() {
return slaId;
}
public void setSlaId(Integer slaId) {
this.slaId = slaId;
}
public int getResponseTime() {
return responseTime;
}
public void setResponseTime(int responseTime) {
this.responseTime = responseTime;
}
public int getResolveTime() {
return resolveTime;
}
public void setResolveTime(int resolveTime) {
this.resolveTime = resolveTime;
}
public PriorityEnum getPriority() {
return priority;
}
public void setPriority(PriorityEnum priority) {
this.priority = priority;
}
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
@Entity
@Table(name = "COMPANY_TABLE")
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "COMPANY_ID")
private Integer companyId;
@NotNull
@Column(name = "COMPANY_NAME", unique = true)
private String companyName;
@NotNull
@Column(name = "ADDRESS_LINE1")
private String addressLine1;
@Column(name = "ADDRESS_LINE2")
private String addressLine2;
@NotNull
@Column(name = "CITY")
private String city;
@NotNull
@Column(name="STATE_NAME")
private String state;
@NotNull
@Column(name = "COUNTRY")
private String country;
@NotNull
@Column(name = "PHONE")
private String phone;
@NotNull
@Column(name = "POSTAL_CODE")
private String postalCode;
@NotNull
@Column(name = "COMPANY_WEBSITE")
private String companyWebsite;
@OneToMany(mappedBy = "company", cascade = CascadeType.ALL)
private List<User> userList = new ArrayList<User>();
@OneToMany(mappedBy = "product", cascade = CascadeType.ALL)
private List<ProductSLA> productSLAList = new ArrayList<ProductSLA>();
@OneToMany(mappedBy = "company", cascade = CascadeType.ALL, orphanRemoval=true)
private List<AccessLevel> accessLevelList=new ArrayList<AccessLevel>();
public Company() {
super();
}
public Company(Integer companyId, String companyName, String addressLine1, String addressLine2, String city,
String state, String country, String phone, String postalCode, String companyWebsite) {
super();
this.companyId = companyId;
this.companyName = companyName;
this.addressLine1 = addressLine1;
this.addressLine2 = addressLine2;
this.city = city;
this.state = state;
this.country = country;
this.phone = phone;
this.postalCode = postalCode;
this.companyWebsite = companyWebsite;
}
public Integer getCompanyId() {
return companyId;
}
public void setCompanyId(Integer companyId) {
this.companyId = companyId;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getAddressLine1() {
return addressLine1;
}
public void setAddressLine1(String addressLine1) {
this.addressLine1 = addressLine1;
}
public String getAddressLine2() {
return addressLine2;
}
public void setAddressLine2(String addressLine2) {
this.addressLine2 = addressLine2;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public String getCompanyWebsite() {
return companyWebsite;
}
public void setCompanyWebsite(String companyWebsite) {
this.companyWebsite = companyWebsite;
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
public void addUser(User user) {
userList.add(user);
user.setCompany(this);
}
public List<ProductSLA> getProductSLAList() {
return productSLAList;
}
public void setProductSLAList(List<ProductSLA> productSLAList) {
this.productSLAList = productSLAList;
}
public void addProductSLA(ProductSLA productSLA) {
productSLAList.add(productSLA);
productSLA.setCompany(this);
}
public List<AccessLevel> getAccessLevelList() {
return accessLevelList;
}
public void setAccessLevelList(List<AccessLevel> accessLevelList) {
this.accessLevelList = accessLevelList;
}
public void addAccessLevel(AccessLevel accessLevel) {
accessLevelList.add(accessLevel);
accessLevel.setCompany(this);
}
}
편집 나는 해결책을 찾았지만 많은 솔루션이 있기 때문에 내가 사용하는 어느하고 사용하는 방법을 혼동하고있다. 당신의 최대 절전 모드 세션을 가정 는 Avoid Jackson serialization on non fetched lazy objects
DTO와 관련 매핑 코드를 만들지 않으려면 지연 필드를 제외하는 JsonView를 return하는 것이 좋습니다. https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring –
나는 받아 들인 해결책을 따르지 않을 것이다; 간단한 경우에는 쉽게 작동하지만 복잡한 경우에는 사용자 정의 지원을 제공하는 것이 까다로울 수 있습니다. ModelMapper 또는 JsonView (@Alan이 제안한대로) 나 다른 DTO 핸들링 프레임 워크를 사용할 것을 제안합니다. –