如何解决Hibernate-JsonMappingException:使用@JsonIgnore
我正在使用Java 1.7。我有一个REST服务,当我调用它时,尝试将Java对象映射到JSON时会收到以下错误:
HTTP状态500-org.codehaus.jackson.map.JsonMappingException: 无法延迟初始化角色集合: entity.Person.flightPreferences,没有会话或会话被关闭 (通过参考链: com.nexct.auth.model.UserDetailsAndRoles [“ person”]-> entity.Person [“ approver”]-> entity.approval.AutoApprovalApproverConfiguration [“ approver”]-> entity.Person [“ flightPreferences”])
和
org.hibernate.LazyInitializationException:无法延迟初始化 角色集合:entity.Person.flightPreferences,无会话或 会话已关闭
代码:
Person.java
@OneToMany(cascade = CascadeType.ALL)
@JsonIgnore
public List<TravellerFlightPreference> getFlightPreferences()
{
return flightPreferences;
}
This帖子建议添加@JsonIgnore
,但仍然出现错误。
AuthenticationResource.java
@GET
@Path("/details")
@ApiOperation(value="Get user details for a user held in the jwt")
@ApiResponses({
@ApiResponse(code=200,message="Success"),@ApiResponse(code=404,message="Not Found")
})
@Produces({ MediaType.APPLICATION_JSON })
public Response details(@HeaderParam("Authorization") String token,@Context HttpServletRequest request) {
UserDetailsAndRoles userDetailsAndRoles = new UserDetailsAndRoles();
String jwtToken = getJwtToken(token);
String userName = jwtTokenUtil.extractUserName(jwtToken);
Set<Role> memberRoles = new HashSet<>();
Set<UserRole> userRoles = new HashSet<>();
try {
Member member = memberService.getMemberByUserName(userName);
Person person = personService.getPersonEntityByMemberId(member.getId());
//List<TravellerFlightPreference> travellerFlightPreferences = person.getFlightPreferences();
List<Employee> employees = employeeService.findEmployeeByMemberId(member.getId());
Contact contact = loginLocal.findContactMemberId(member.getId());
List<Account> accounts = loginLocal.findAllAccountByMemberId(member.getId());
memberRoles = roleManager.viewRolesAssignedToMember(new ViewRolesAssignedToMemberRequest(member.getId())).getRoles();
for (Role role: memberRoles) {
UserRole userRole = new UserRole();
userRole.setId(role.getId());
userRole.setName(role.getName());
userRole.setDescription(role.getDescription());
userRoles.add(userRole);
}
userDetailsAndRoles.setAccounts(accounts);
userDetailsAndRoles.setContact(contact);
userDetailsAndRoles.setEmployees(employees);
userDetailsAndRoles.setMember(member);
userDetailsAndRoles.setPerson(person);
userDetailsAndRoles.setUserRoles(userRoles);
//userDetailsAndRoles.setTravellerFlightPreferences(travellerFlightPreferences);
} catch (MemberDoesNotExistException e) {
logger.severe("Error getting member for userName: "+userName);
e.printStackTrace();
return Response.ok(null,"Error getting member for userName: "+userName+". "+e.getMessage()).build();
}
return Response.ok().entity(userDetailsAndRoles).build();
}
我认为此错误是因为将flightPreferences
对象转换为JSON时未加载Person
。
问题
- 在
Person
对象中,我不告诉Hibernate随意加载flightPreferences
,为什么它们不可用? - 当我添加
@JsonIgnore
时,为什么仍然出现错误?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。