在JPA Query中使用枚举



我试图使用JPA来更新实体属性,这是我的域模型中的枚举,我不能使它工作。

我有以下实体:

public class A {
@Id
@Column(name = "id")
private Long id;
@ManyToOne
@JoinColumn(name = "status")
private Status status;
}
public class Status {
@Id
@Enumerated(EnumType.STRING)
@Column(name = "id")
private StatusId id;
public enum StatusId {
B, C, D, E, F
}
}

和这个JPA存储库:

public interface ARepository extends JpaRepository<A, Long> {
@Modifying
@Transactional
@Query("UPDATE A SET status = ?2 WHERE id = ?1")
void updateStatus(Long id, Status.StatusId status);
}

执行此方法会抛出以下错误:

Caused by: java.lang.IllegalArgumentException: Parameter value [B] did not match expected type [com.***.Status (n/a)]

对于如何解决这个问题有什么想法吗?

错误提示:

参数值[B]与预期类型不匹配[com.***. status

,在你的查询中,你正在有效地尝试分配类型为状态的对象。StatusId到类型为Status的字段

您应该尝试将查询更改为如下内容:

UPDATE SETstatus.id= ?1

最新更新