【问题标题】:How to convert string into lob while inserting the data through jpa native query?jpa原生查询插入数据时,如何将string转成lob?
【发布时间】:2022-12-18 00:29:52
【问题描述】:

当我使用 @lob 作为编码文件同时将我的实体与数据库映射并使用 save() 方法插入数据时,我能够将编码文件正确插入我的 Postgres 数据库中

@Lob
@Column(name="data", columnDefinition = "text")
private String fileContent;

当我尝试使用插入本机查询插入相同的编码文件时,它没有正确插入。

@Override
@Transactional
public void insertEncodeData(CustomerData customer) {
   entityManager.createNativeQuery("insert into customer (name,data) VALUES (?,?)")
                .setParameter(1, customer.getName())
                .setParameter(2, customer.getData())
                .executeUpdate();
    }

编码后的 base64 文件不以 blob 格式存储,它被认为是简单的字符串。谁能帮我这个?

尝试 1

@Override
@Transactional
public void insertEncodeData(CustomerData customer) {
  Clob lob = entityManager.unwrap(Session.class).getLobHelper().createClob(customer.getData());
   entityManager.createNativeQuery("insert into customer (name,data) VALUES (?,?)")
                .setParameter(1, customer.getName())
                .setParameter(2, lob)
                .executeUpdate();
    }

我已将编码文件转换为 clob 并尝试插入它,但仍然无法正常工作。

先感谢您!

【问题讨论】:

    标签: java postgresql spring-boot hibernate spring-data-jpa


    【解决方案1】:

    要使用本机查询插入文件,请使用以下方法:

    1. 为您的 JdbcTemplate 创建一个 bean
          @Bean
          public JdbcTemplate jdbcTemplate(DataSource dataSource) {
              return new JdbcTemplate(dataSource);
          }
      
      
      1. 利用 JdbcTemplate 和 preparedStatement 插入数据
       @Autowired
       private JdbcTemplate jdbcTemplate;
      
      @Override
      @Transactional
      public void insertEncodeData(CustomerData customer) {
        String insertStatement = "insert into customer (name,data) VALUES (?,?)";
      
              jdbcTemplate.update(insertStatement, ps -> {
                  
                  ps.setString(1,customer.getName());
                  ps.setClob(2,org.hibernate.engine.jdbc.ClobProxy.generateProxy(customer.getContent()));
              });
       
      }
      

      给定的方法使用本机查询正确插入编码文件。

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 1970-01-01
      • 2011-08-31
      • 2021-12-11
      • 2021-09-22
      • 1970-01-01
      • 2023-01-14
      • 1970-01-01
      • 2021-03-16
      相关资源
      最近更新 更多