【问题标题】:How to store a List<String> from spring JPA to text[] array in database如何将 Spring JPA 中的 List<String> 存储到数据库中的 text[] 数组
【发布时间】:2017-07-07 13:52:30
【问题描述】:

我正在尝试将 Java 数组列表写入 postgres 数据库。但我做不到,我也不会出错。我正在尝试发布数据

"skill":["java,dotnet"]

使用邮递员工具,但在 Post 上没有任何反应,我在 db 中看不到任何数据。我的控制台中也没有任何错误。请帮我解决这个问题,我想知道该怎么做

我可以从数据库中读取数组数据但不能写入

    /*
     * Spring Entity:
     */
    @Column(name="skill" , columnDefinition = "text[]")
    @Convert(converter =ListToStringConverter.class)
        private List<String> skill=new ArrayList<>();       
        ublic List<String> getSkill() {
            return skill;
        }
        public void setSkill(List<String> skill) {
            this.skill= skill;
        }

    @Converter
    public class ListToStringConverter implements AttributeConverter<List<String>, String> { 

        @Override
        public String convertToDatabaseColumn(List<String> attribute) {
            if (attribute == null || attribute.isEmpty()) {
                return "";
            }
            return StringUtils.join(attribute, ",");
        }

        @Override
        public List<String> convertToEntityAttribute(String dbData) {
            if (dbData == null || dbData.trim().length() == 0) {
                return new ArrayList<String>();
            }

            String[] data = dbData.split(",");
            return Arrays.asList(data);
        }
    }



Controller Code:

这是我在数据库中创建对象的控制器代码,我使用从控制器调用的接口服务保存到作为 JPA 存储库的 db-Postgres

    @RequestMapping(value = "/reqCreate", method = RequestMethod.POST)
    public ResponseEntity<Requirement> addRequirement(@RequestBody Requirement requirement) {
        reqService.save(requirement);               
        return new ResponseEntity<Requirement>(requirement, HttpStatus.CREATED);
    }

Service:
    public void save(Requirement r) {           
        reqRepo.save(r);
    }

【问题讨论】:

  • 您好,欢迎来到 SO!您向我们展示了如何处理 ListString 之间的数据转换。但是您如何实际访问数据库?请编辑您的问题并将该代码添加到其中。您有任何错误消息或异常吗?
  • 没有columnDefinition = "text[]"也能用吗?
  • 想知道您的 TABLE 模式是否是使用 text[] 类型的列创建的?
  • 嗨 Lupz,我收到以下错误代码:错误:列“技能”的类型为 text[],但表达式的类型为字符变化提示:您需要重写或强制转换表达式。跨度>
  • @Carrie 你能找到解决方案吗?我面临同样的问题,不知道如何解决。

标签: java spring postgresql jpa


【解决方案1】:

columnDefinition 似乎是错误的。

你想把Collection转成String,但你还是声明了数组类型的列。

"text[]" 替换为"text" 并检查它是否有效?

【讨论】:

  • 运气不好我仍然无法保存到数据库:-(我只能在我的控制台中读取这个###[INFO] 2017-07-08 09:26:17:441 [org .springframework.web.servlet.DispatcherServlet] - FrameworkServlet 'dispatcherServlet':初始化开始 ###[INFO] 2017-07-08 09:26:17:502 [org.springframework.web.servlet.DispatcherServlet] - FrameworkServlet 'dispatcherServlet ': 初始化在 60 毫秒内完成
  • 确保让 hibernate 使用新的列定义重新创建架构。
猜你喜欢
  • 1970-01-01
  • 2013-05-12
  • 2017-05-26
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 2019-12-22
相关资源
最近更新 更多