【发布时间】:2018-02-09 11:04:00
【问题描述】:
我正在开发一个 SpringBoot 应用程序,我正在尝试使用以下命令进行简单删除:@Query(value="", nativeQuery = true)
我的查询有动态参数,但参数没有被替换,我在控制台上也没有收到任何错误。
我尝试了带有硬编码参数的 NativeQuery,它工作得非常好。
下面是代码:
@Repository
public interface TypGbPccRepo extends JpaRepository<TypGbPcc, String>{
@Transactional
@Modifying(ClearAutomatically = true)
@Query(value = "delete from T_ST_KFR__TYP_GB_PCC typ where Trunc(typ.GUELTIG_AB) IN (?1) and typ.GB_PCC IN (?2)" , nativeQuery=true)
void deleteRecords(String datumStr , String gbPccStr);
}
我什至尝试了以下查询:
@Query(value = "delete from T_ST_KFR__TYP_GB_PCC typ where Trunc(typ.GUELTIG_AB) IN (:datumStr ) and typ.GB_PCC IN (:gbPccStr)" , nativeQuery=true)
void deleteRecords(@Param("datumStr ") String datumStr , @Param("gbPccStr") String gbPccStr);
我要替换的参数:
datumStr - TO_DATE('12-Sep-2012', 'dd-MM-yy'), TO_DATE('14-Sep-2012', 'dd-MM-yy')
gbPccStr - 'P0','P1'
我正在实现上述代码以删除基于组合主键的记录,该组合主键是GUELTIG_AB 和GB_PCC 的组合。如果可能的话,建议我如何使用查询 QueryMethod 来实现这一点?
我已经能够使用 QueryMethod 删除基于非复合主键的记录,但我无法为复合主键执行此操作。我必须一次删除多条记录。
下面是我的POJO
@Entity
@IdClass(TypGbPccId.class)
@Table(name="T_ST_KFR_TYP_GB_PCC")
public class TypGbPcc implements Serializable{
private static final long serialVersionUID = .....
@Id
@Column(name="GB_PCC")
private String gbPcc = null ;
@Column(name="GB_PCC_desc")
priavte String gbPccDesc = null ;
@Column(name="GB_PCC_SQL")
priavte String gbPccSql = null ;
@Id
@Column(name="GUELTIG_AB")
@JsonFormat(pattern = "dd-MM-yyyy")
private String gueltigAb = null ;
}
setter & getter 在这里
【问题讨论】:
-
您的查询对我来说看起来不错。我想你可以尝试使用命名参数?例如
@Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname") User findByLastnameOrFirstname(@Param("lastname") String lastname, @Param("firstname") String firstname);请参阅此处的文档:docs.spring.io/spring-data/jpa/docs/current/reference/html(示例 61。使用命名参数)。 -
我尝试使用它,但问题是,我将参数值创建为 String 并发送到 Repo,而我的 GUELTIG_AB 列之一是日期字段,因此它会引发不匹配错误跨度>
-
PLease hellp.... Stackoverflow 网络中的任何人
-
您以错误的方式使用它。它实际上会被替换,但会被您传入的文字字符串所取代......所以它将按字面意思插入
'TO_DATE('12-Sep-2012' , 'dd-MM-yy'),TO_DATE('14-Sep-2012' , 'dd-MM-yy')',而不是作为 SQL 语句的一部分。基本上不会评估TO_DATE。
标签: java spring-boot spring-data-jpa