使用Spring Data JPA搜索数组类型列

时间:2019-10-09 12:18:16

标签: spring-boot jpa

我想使用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

0 个答案:

没有答案