Java 使用转换器时在类上找不到字段的setter

Java 使用转换器时在类上找不到字段的setter,java,mysql,hibernate,Java,Mysql,Hibernate,在我的hibernate应用程序中,我有一个可嵌入类,如下所示 @Embeddable public class ClientUserId implements Serializable { @Column(name = "client_id") private Long clientId; @Column(name = "user_id") private Long userId; public ClientUserId() { }

在我的hibernate应用程序中,我有一个可嵌入类,如下所示

@Embeddable
public class ClientUserId implements Serializable {

    @Column(name = "client_id")
    private Long clientId;
    @Column(name = "user_id")
    private Long userId;

    public ClientUserId() {
    }

    public Long getClientId() {
    return clientId;
}

public void setClientId(Long clientId) {
    this.clientId = clientId;
}

public Long getUserId() {
    return userId;
}

public void setUserId(Long userId) {
    this.userId = userId;
}
}
还有我的POJO班

public class ClientUser implements Serializable {

    @Id
    @Embedded
    private ClientUserId clientUserId;
    @Column(name = "user_name", nullable = false, unique = true, length = 32)
    private String userName;
    @Column(name = "first_name", length = 32)
    private String firstName;
    @Column(name = "last_name", length = 32)
    private String lastName;
    @Column(name = "email", length = 64)
    private String email;
    public ClientUser() {
    }

  public ClientUserId getClientUserId() {
    return clientUserId;
}

public void setClientUserId(ClientUserId clientUserId) {
    this.clientUserId = clientUserId;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}
}
我的sql查询是

 session.createSQLQuery("SELECT  user_id as userId,email as email,first_name as firstName,last_name as lastName,user_name as userName FROM users").
addScalar("email", new StringType()).addScalar("firstName", new StringType()).addScalar("lastName", new StringType()).addScalar("userName", 
new StringType()).addScalar("userId", new LongType()).setResultTransformer(Transformers.aliasToBean(ClientUser.class)).list();
在我的sql查询中,我从一个表用户(与ClientUser表的结构相同,只有一个字段clientId除外)获取一个结果集,并将其转换为名为ClientUser的类。 由于嵌入了ClientUserId,我收到了一个错误,因为
在类上找不到userId的setter

如何解决这个问题?

这听起来是个非常非常糟糕的主意:返回ClientUser的方法的用户会认为您返回的是真实的、附加的ClientUser实体,具有完整的ID,而不是不完整的、分离的对象。您应该返回不同类型的对象。为什么不将users表映射到用户实体?无论如何,不要使用aliasToBean和循环遍历行,为每行创建一个新的POJO。