【发布时间】:2020-01-04 18:56:33
【问题描述】:
我正在尝试使用以下方法更新我的实体列:
@Modifying
@Query("update Person person set person.hixNumber = :hixNumber , "
+ "fixNumber.fixNumber = :fixNumber where person.role.type = 'ADMIN'")
int updatePersonByRole(@Param("hixNumber ") int hixNumber , @Param("fixNumber ") int fixNumber);
此方法给出异常原因:
原因:org.postgresql.util.PSQLException: ERROR: syntax error at 或靠近“十字架”
因为生成的原生查询是错误的:
update person cross join set hix_humber=?, set fix_humber=? where type=?
我的 Person 实体类如下所示:
@Getter
@Setter
@Entity
@NoArgsConstructor
public class Person {
@EmbeddedId
private PersonId personId;
@MapsId("roleId")
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "role_id", insertable = false, updatable = false)
private Role role;
@MapsId("storeId")
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "store_id", insertable = false, updatable = false)
private Store store;
private int hixNumber;
private int fixNumber;
}
和主键实体:
@Getter
@Setter
@EqualsAndHashCode
@Embeddable
public class Personid implements Serializable {
private Long roleId;
private Long storeId;
}
我做错了什么?谢谢。
【问题讨论】:
-
Person 和 Role 的关系是什么?怎么注释的?
-
向我们展示可嵌入的 PersonId
-
@MaciejKowalski 还添加了 personId
标签: hibernate jpa spring-data-jpa jpql spring-repositories