繁体   English   中英

更新查询 spring 数据 JPA 修改所有列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM