JPA: @SqlResultSetMapping дает мне два объекта, а не один - PullRequest
1 голос
/ 13 июля 2011

Я пытаюсь сделать некоторые 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")  
        })  
    })

Но это дает мне два объекта вместо одного. Кто-нибудь может мне помочь, пожалуйста? Спасибо.

1 Ответ

0 голосов
/ 13 марта 2013

Два объекта являются результатом использования аннотаций entityClass= (2x, один для LocalUser и один для RoleName).Объедините их в одно определение entityClass, и будет возвращен один объект.

...