注解这里不允许

问题描述 投票:8回答:4

我创建它实现JpaRepository与用户实体工作的UserRepository。我需要一种方法来更新的用户名。我决定与@Query的帮助下做到这一点。但是,它是由标记的IntelliJ。这里是我的仓库代码:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

@Modifying
@Query(value = "update User user set user.name= %?username"))
void updatingUser(@Param(value = "username") String username);
}

而对于实体:

@Entity
@Table(name = "users")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Long id;

@NotNull
@Column(name = "user_name")
private String username;
}

我面临着这样一个问题:“注解这里不允许”说的IntelliJ IDEA,标志着与@Query注释行。它让我困惑

spring intellij-idea annotations spring-data-jpa
4个回答
9
投票

对不起大家。它是如此的愚蠢,我在这行的末尾写双引号。但其实我不明白为什么的IntelliJ没有注意到这一点,但开始打上新的错误,这条线


7
投票

就我而言,我不小心输入了“;”在@Query的末尾。可以帮助别人。


0
投票

在这个地方使用@Query注解是绝对合适。但是,你的询问是不太正确的。

查询参数可以被命名为 - “:名称”或索引 - “1?”。

您应该使用更新查询用“其中”条款,否则您将更新所有记录。

你的代码应该是这样的:

@Modifying
@Query("update User u set u.name = ?1 where u.name = ?2")
void updateByName(String value, String name);

或者是这样的:

@Modifying
@Query("update User u set u.name = :value where u.name = :name")
void updateByName(@Param("value") String value, @Param("name") String name);

注意 - 而“名称”字段是不是唯一的,你将更新给予“名称”的所有用户。要更新只有一个用户必须使用的唯一字段或者主键“其中”条款中,例如:

@Modifying
@Query("update User u set u.name = ?1 where u.id = ?2")
void updateById(String value, Long id);

顺便说一句,如果你需要更新具有特定名称模式的所有用户 - 使用“喜欢”操作:

@Modifying
@Query("update User u set u.name = ?1 where u.name like '%'||?2||'%'")
void updateByNameLike(String value, String name);

有用的信息:

Spring Data JPA - Reference Documentation

JPQL Language Reference

SQL Tutorial

附:注释@Repository是没有必要的


0
投票

嗯,我从SQLyog的复制后得到了与下面的查询这一问题。

SELECT  id FROM (SELECT * FROM departments ORDER BY id) dpt_sorted, (SELECT @pv := '2') initialisation WHERE   FIND_IN_SET(parent_dept, @pv) AND LENGTH(@pv := CONCAT(@pv, ',', id));

但是,当我输入查询,该错误信息消失。也许是在我的情况copypaste问题。这可能是有益的。

© www.soinside.com 2019 - 2024. All rights reserved.