Java 使用转换器时在类上找不到字段的setter
在我的hibernate应用程序中,我有一个可嵌入类,如下所示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() { }
@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。