gpt4 book ai didi

java - 更新查询spring data JPA修改所有列

转载 作者:行者123 更新时间:2023-12-01 19:41:15 24 4
gpt4 key购买 nike

我正在尝试根据用户从 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 子句始终为 true,如下所示,

输入 1 的示例,只有 id = 1 的一列应该修改,但查询也会修改第 2、3 行等,

update Domain set DELETED = true, LAST_MODIFIED_BY = lastModifiedBy where 1= 1

为什么会这样,有什么解决办法?

PS:我不想从服务类显式传递 ID,因为我的 id 已在域对象中可用。

最佳答案

其中 id = id 将始终为 true,如果这正是您正在使用的语法...您还有其他意思吗?

@Query 中的参数前面不应该加 吗?对于索引参数和 : 对于命名参数?

   @Query(value = "update Domain set DELETED = true, LAST_MODIFIED_BY = :lastModifiedBy where id = :id")

关于java - 更新查询spring data JPA修改所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59172762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com