Я пытаюсь сделать некоторые NativeQueries, но я застрял с конфигурацией @SqlResultSetMapping.
У меня есть эти классы:
@Entity
public class LocalUser implements Serializable {
private static final long serialVersionUID = 1265845L;
@Id
private String username;
@Column(nullable=false)
private String password;
@OneToMany
private List<RoleName> roles;
public LocalUser() {
}
public LocalUser(String username, String password, List<RoleName> roles) {
this.username = username;
this.password = password;
this.roles = roles;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<RoleName> getRoles() {
return roles;
}
public void setRoles(List<RoleName> roles) {
this.roles = roles;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
@Entity
public class RoleName implements Serializable {
private static final long serialVersionUID = 12598741564894L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String roleName;
public RoleName() {
}
public RoleName(Long id, String roleName) {
this.id = id;
this.roleName = roleName;
}
public RoleName(String roleName) {
this.roleName = roleName;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
}
У меня вопрос, как написать проппер @SqlResultSetMapping для класса LocalUser. Мой тестовый оператор SQL:
select 'user' as username, 'passwd' as password, 1 as id, 'admin' as roleName;
И я хотел бы получить одного локального пользователя Entity, с именем пользователя user, паролем passwd и списком ролей, где находится admin с идентификатором 1.
Я понял, что-то вроде этого:
@SqlResultSetMapping(name="LocalUserMapping",
entities={
@EntityResult(entityClass=LocalUser.class,fields={
@FieldResult(name="username",column="username"),
@FieldResult(name="password",column="password")
}),
@EntityResult(entityClass=RoleName.class,fields={
@FieldResult(name="id",column="id"),
@FieldResult(name="roleName",column="roleName")
})
})
Но это дает мне два объекта вместо одного. Кто-нибудь может мне помочь, пожалуйста? Спасибо.