这里不允许注释

时间:2017-08-05 21:44:27

标签: spring intellij-idea annotations spring-data-jpa

我正在创建一个实现JpaRepository的UserRepository,并与User实体一起使用。我需要一种方法来更新用户名。我决定在@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注释标记了这一行。这让我很困惑

5 个答案:

答案 0 :(得分:9)

对不起,伙计们。对于我来说,在这一行的末尾写双引号真是太愚蠢了。但我实际上不明白为什么Intellij没有注意到这一点,但开始用另一个错误标记这一行

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

查询参数可以命名为 - ':name'或indexed - '?1'。

您应该使用带有'where'子句的更新查询,否则您将更新所有记录。

你的代码应该是这样的:

@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);

注意 - 当'name'字段不唯一时,您将使用给定的'name'更新所有用户。要仅更新一个用户,必须在'where'子句中使用唯一字段或主键,例如:

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

顺便说一下,如果您需要更新具有特定名称模式的所有用户 - 请使用“like”运算符:

@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

P.S。注释@Repository不是必需的

答案 3 :(得分: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问题。这可能会有所帮助。

答案 4 :(得分:0)

抱歉,这已经晚了 4 年,但您在 @Query 行的末尾多了一个 ')'