我想使用Spring Data JPA和PostgreSQL创建一些应用程序,我搜索并找到了一些方法来选择一些数组类型列,该方法是自定义类UserType。
我所指的链接请点击here
自定义课程
public class GenericArrayUserType<T extends Serializable> implements UserType {
@Override
public Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner)
throws HibernateException, SQLException {
if (rs.wasNull()) {
return null;
}
Array array = rs.getArray(names[0]);
String[] javaArray = (String[]) array.getArray();
return javaArray;
}
}
实体
@Data
@Entity(name = "userdata")
@JsonIgnoreProperties(ignoreUnknown=true)
public class UserData {
@Id
@Column(name = "openid")
private String openid;
@Column(name = "vegetables")
@Type(type = "com.siweikongjian.feibonaqi.web.api.repository.config.GenericArrayUserType")
private String[] vegetables;
@Column(name = "meat")
@Type(type = "com.siweikongjian.feibonaqi.web.api.repository.config.GenericArrayUserType")
private String[] meat;
}
类CrudRepository在保存时工作正常,但在方法findById的结果中,即使我有两个数组类型列,我也只能得到一个正确的数组类型列。
我检查了自定义类代码,发现问题可能是
rs.wasNull() = true
,但rs.getArray(names[0])
确实存在一些价值。
所以我将代码更改为此:
Array array = rs.getArray(names[0]);
if (rs.wasNull() && StringUtils.isEmpty(array)) {
return null;
}
String[] javaArray = (String[]) array.getArray();
return javaArray;
正在工作,但是我很困惑,为什么会这样?
我正在将Spring-Boot用于版本2.1.6.RELEASE
,将Java版本用于1.8