如何使用JPA中的嵌套JSON获得OnetoMany结果
我有2个POJO,如下所示: UserDto如何使用JPA中的嵌套JSON获得OnetoMany结果,json,hibernate,spring-mvc,jpa,Json,Hibernate,Spring Mvc,Jpa,我有2个POJO,如下所示: UserDto @Id @Column(name = "c_um_npk_id", nullable = false) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_sequence") @SequenceGenerator(name = "user_sequence", sequenceName = "t_user_master_c_um_
@Id
@Column(name = "c_um_npk_id", nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_sequence")
@SequenceGenerator(name = "user_sequence", sequenceName = "t_user_master_c_um_npk_id_seq", initialValue = 1, allocationSize = 1)
private Long id;
@Column(name = "c_um_vnm_username", nullable = false)
private String username;
@JsonManagedReference("user-role")
@OneToMany(mappedBy = "userDto", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<RoleDto> roleDtos;
/* other fields are omitted for simplicity */
@Id
@SequenceGenerator(name = "role_sequence", sequenceName = "t_user_roles_c_ur_npk_role_id_seq", initialValue = 1, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "role_sequence")
@Column(name = "c_ur_npk_role_id", nullable = false)
private Long Id;
@JsonBackReference("user-role")
@ManyToOne
@JoinColumn(name = "c_ur_nfk_user_id")
private UserDto userDto;
@Column(name = "c_ur_vnm_role")
String role;
/**省略getter setter**/
现在,我试着用JPA
entityManager.createQuery("SELECT ud.id,ud.username,roles.role from UserDto ud JOIN ud.roleDtos roles WHERE ud.username = :username")
.setParameter("username", userName).getResultList();
在这里,我需要一个结果低于预期的结果
{
id : 1,
username : abc123,
roleDtos :[
{
role : 'SUPER_ADMIN'
},{
role : 'SUPPORT_PERSON'
}
]
}
但我并没有得到带有JPA结果的嵌套对象,也没有像DB一样得到许多行
1. id : 1,
username : abc123
role : SUPER_ADMIN
2. id : 1,
username : abc123
role : SUPPORT_PERSON
我错过了JPA吗?请先帮我谢谢。JPA不创建JSON。JPA将对象持久化到数据库,并检索它们。。。作为Java对象。然后,您必须使用JSON序列化器来创建JSON。是否有我可以引用的链接?引用什么?您需要定义问题所在。。。将java对象从数据库中取出,或转换为JSON。Internet搜索提供了您应该需要的所有引用FetchMode Join可以帮助您。
@manytone(fetch=FetchType.LAZY)@fetch(FetchMode.Join)@JoinColumn(name=“STOCK\u ID”,nullable=false)public STOCK getStock(){return this.STOCK;}