我正在尝试从Query响应中创建单个JSON对象,该对象从两个表(会话和用户)中获得两行。但是出现以下错误:SQL错误:936,SQLState:42000。我正在使用Oracle数据库。
这是有效的JSON响应,我需要将其转换为单个JSON对象:
JSON:
[{"id":999,"name":John"},
{"id":999,"name":Peter"}]
查询:
@Query("SELECT new DTO.KaytDto(s.id, u.name) "
+ "FROM Session s INNER JOIN s.users u WHERE s.id=999")
现在我需要将JSON打印为以下内容:
[{
"Id": "999",
"Names":
[{"name" : "John"},
{"name" : "Peter"}]
}]
我试图将Set添加到我的DTO类构造函数中,但是当执行以下查询时,我得到了Whitelabel错误页面:500和Oracle错误代码。 当我在Oracle SQL Developer中尝试该查询时,从查询中形成的Hibernate sql查询将起作用。
有什么想法我做错了什么,或者如何获得想要的JSON打印?
使用一组用户对象进行查询:
@Query("SELECT new DTO.KaytDto(e.id, e.userSet) "
+ "FROM Session e INNER JOIN e.userSet d WHERE e.id=999")
DTO类:
public class KaytDto {
private Long Id;
private Set<User> userSet;
public KaytDto(Long Id, Set<User> userSet) {
this.Id = Id;
this.userSet = userSet;
}
//setters/getters
@Override
public String toString() {
return "KaytDto [users=" + userSet + ", id=" + Id + "]";
}
}
会话实体被映射到具有一对多关系的用户实体:
@Entity
@Table(name = "session")
public class Session {
@Id
@Column(name = "id", nullable = false)
private long id;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "session")
private Set<User> userSet;
public Session() {
}
}
用户实体被映射到具有多对一关系的会话:
@Entity
@Table(name = "user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "name")
private String name;
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "session_id", nullable = false)
@Fetch(FetchMode.JOIN)
private Session Session;
public User(String name) {
this.name = name;
}
}