[英]Update query spring data JPA modifies all columns
我正在尝试根据用户从 UI 传递的 ID 更新表。
问题陈述示例:当用户将 Id 发送为 1 时,表应该只更新一行,其他几个参数如 lastModifiedBy 并删除,因为我的代码更新表中的所有行,
orm.xml
<entity class="com.example.Domain" name="Domain">
<table name="t_table"/>
<attributes>
<id name="id">
<column name="ID" nullable="false"/>
<generated-value strategy="SEQUENCE" generator="S_GEN"/>
<sequence-generator name="S_GEN" sequence-name="S_GEN" allocation-size="1"/>
</id>
<basic name="deleted">
<column name="DELETED" nullable="false" length="5"/>
</basic>
<basic name="lastModifiedBy">
<column name="LAST_MODIFIED_BY" nullable="false" length="100"/>
</basic>
</attributes>
实体类
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Domain {
private Long id;
private boolean deleted;
private String lastModifiedBy;
}
JPA 存储库:
public interface JpaDomainRepository extends Repository<Domain, Long> {
@Modifying
@Query(value = "update Domain set DELETED = true, LAST_MODIFIED_BY = lastModifiedBy where id = id")
int update(Domain domain);
}
服务等级
public void update(UpdateCommand command) {
Domain domain = repository.findByIdAndDeletedFalse(command.getID());
domain.setLastModifiedOn(command.getLastModifiedOn());
domain.setLastModifiedBy(command.getLastModifiedBy());
repository.update(domain);
}
如果表已经有多个条目并且我正在尝试更新第一行,那么其余的所有行都被修改,
简而言之,对于如下所示的 where 子句,我的更新查询始终为真,
输入 1 的示例,仅应修改 id = 1 的一列,但查询也在修改第 2、3 行等,
update Domain set DELETED = true, LAST_MODIFIED_BY = lastModifiedBy where 1= 1
为什么它的行为如此,可能的解决方案是什么?
PS:我不想从服务类明确传递 ID,因为我的 id 已经在域对象中可用。
where id = id 将始终为真,如果这是您正在使用的确切语法……您的意思是其他什么?
@Query 中的参数不应该以 ? 对于索引参数和 : 对于命名参数?
@Query(value = "update Domain set DELETED = true, LAST_MODIFIED_BY = :lastModifiedBy where id = :id")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.