首页 > 解决方案 > Java Spring JPA 插入

问题描述

请帮我在 spring-data-jpa 中执行 Postgres 查询:

@Transactional
public interface JournalAdd extends CrudRepository<Journal, Long> {
        @Modifying
        @Query(value = "insert into journals (messageid, oldowner) values ('dgf', 'fgd')", nativeQuery = true)
        void updateJournalOldownerMessageid(Long id);
}

执行后没有错误,但在表中只添加了一行没有值

ohtype.descriptor.sql.BasicBinder : 绑定参数 [1] 作为 [VARCHAR] - [null] ohtype.descriptor.sql.BasicBinder : 绑定参数 [2] 作为 [VARCHAR] - [null]

Postgres 表日志:

@Entity
@Table(name = "journals")
public class Journal implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "oldowner")
    private String oldowner;
    @Column(name = "messageid")
    private String messageid;

标签: javaspringpostgresqlspring-bootspring-data-jpa

解决方案


如果你正在使用nativequery=true,那么你必须使用纯 postgres sql in @Query。您正在使用JPQLin@Query但告诉 JPA 执行是作为本机查询。

@Query如果在此处提供,请使用查询更改您的值。您的查询应如下所示

@Modifying
@Query(value = "INSERT INTO journals (messageid, oldowner) select m.id, m.owner from message m where m.id = ?1", 
    nativeQuery = true)
void updateJournalOldowner(Long id);


推荐阅读