【问题标题】:Update in JPA without native query在没有本机查询的情况下更新 JPA
【发布时间】:2017-12-29 11:15:58
【问题描述】:

我有一个实体类

@Data
@Entity
@Table("invite_data")
public class InvitationData {

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

@Column( name = "rl_invitee_email" )
private String inviteeEmailId;

@Column( name = "rl_generated_link" )
private String generatedLink;

@Column( name = "rl_expire_at" )
private Calendar expiresAt;

@Column( name = "rl_generated_code" )
private String generatedCode;

@Column( name = "rl_created_at" )
private Calendar invitedAt;

@ManyToOne( fetch = FetchType.EAGER )
@JoinColumn( name = "rl_frn_created_by", referencedColumnName = "u_id" )
private UserModel invitedBy;

@Column( name = "rl_is_active" )
private Boolean isActive;

@Column( name = "rl_is_used" )
private Boolean isUsed;

@ManyToOne( fetch = FetchType.EAGER )
@JoinColumn( name = "rl_frn_invited_role", referencedColumnName = "as_id" )
private AccountStatus invitedRole;
} 

我无法执行更新查询。

public interface InvitationRepository extends JpaRepository<InvitationData, Long> {

@Modifying( clearAutomatically = true )
@Query( "UPDATE InvitationData invite SET invite.isActive = false WHERE invite.id= :invitationId AND invite.isUsed = false AND"
        + " invite.isActive = true AND invite.expiresAt >=:now AND i.invitedBy =:user" )
Integer cancelInvitation( @Param( "invitationId" ) Long id, @Param( "now" ) Calendar now,
        @Param( "user" ) UserModel user );

}

应用程序无法启动/启动并出现异常

java.lang.IllegalArgumentException: 
org.hibernate.hql.internal.ast.QuerySyntaxException: **Invalid path:** 
'i.invitedBy' [UPDATE com.highpeak.tlp.datastore.model.InvitationData 
invite SET invite.isActive = false WHERE invite.id= :invitationId AND 
invite.isUsed = false AND invite.isActive = true AND invite.expiresAt 
>=:now AND i.invitedBy =:user]

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: 
**Invalid path:** 'i.invitedBy' [UPDATE 
com.highpeak.tlp.datastore.model.InvitationData invite SET 
invite.isActive = false WHERE invite.id= :invitationId AND 
invite.isUsed = false AND invite.isActive = true AND invite.expiresAt 
>=:now AND i.invitedBy =:user]

可能是什么问题?如果我的 Entity 类中有外键,我可以直接将 Entity 类作为参数传递,还是应该执行连接?

【问题讨论】:

    标签: mysql hibernate jpa spring-boot


    【解决方案1】:

    您的查询不正确。

    这个

    i.invitedBy =:user
    

    必须是

    invite.invitedBy =:user
    

    【讨论】:

    • 不敢相信我犯了这么愚蠢的错误。谢谢您的帮助。很抱歉在没有正确验证的情况下发布问题
    猜你喜欢
    • 2014-03-12
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    相关资源
    最近更新 更多