Maven pom依赖:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20230227</version>
</dependency>
字符串
配置方言:
spring:
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
show-sql: 'true'
hibernate:
ddl-auto: update
型
我有以下实体:
@Entity
@Data
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Slf4j
public class CourseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(columnDefinition = "json")
private String list_id_professors;
}
型
SqlCourseRepository文件:
import jakarta.transaction.Transactional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface SqlCourseRepository extends JpaRepository<CourseEntity, Integer>, JpaSpecificationExecutor {
//multiple criteria: JpaSpecificationExecutor
@Transactional
@Modifying
@Query("update CourseEntity set list_id_professors = :list_id_professors where id = :id")
Integer updateCourseListIdProfessors(@Param(value = "id") Integer id, @Param(value = "list_id_professors") String list_id_professors);
// If okk -> integer = num rows affected. 0 if no changes. -1 if error.
}
型
我有一个PostgreSQL数据库:
Postgresql Database Field Initial Value
如果我想更新JSON字段,我可以在数据库内部的SQL查询工具上执行:
第一个月
Postgresql Database Field Updated Value的
我的问题是如何在SqlCourseRepository上做到这一点。
因为我不能在变量后面加上“::json”
Error adding "::json"的
另外,另一种可能性是在Entity的属性定义上使用一个JSON int[]变量。但我有另一个问题,因为我不知道如何做到这一点:
Error changing type to "Integer[]"的
所以我不知道如何把一个SQL查询,可以与PostgreSQL数据库正确交互
2条答案
按热度按时间xam8gpfp1#
你可以尝试转义::操作符,如下所示:
字符串
pdkcd3nj2#
解决方案是编辑将要执行JpaRepository的SQL命令的值。为此,必须添加字段“value”和“nativeQuery”字段。此外,必须将“::json”更改为CAST才能正常工作。
而不是:
字符串
变更为:
型
完整的解决方案:
型
重要的是要补充:
1-由于它的原生SQL命令而不是JPA解释的,我们必须将CourseEntity更改为posytgresql列的名称course_entity。
2-参数的名称**必须与期望@Param值的名称100%**一致