使用泛型编写 HQL UPDATE 查询
Write HQL UPDATE query with generic type
我有一个通用的 tokenRepository 接口:
public interface TokenRepository<T_Token extends Token, T_id> {
@Modifying
@Query("UPDATE T_token as a SET a.revocationReason = :reason WHERE a.id = :id")
void revokeByTokenId (@Param("id") T_id id, @Param("reason") RevocationReason revocationReason);
}
以及专门的存储库界面:
public interface CustomerTokenRepository extends Repository<CustomerToken, Long>, TokenRepository<CustomerToken, Long> {}
当我启动 Spring 启动应用程序时,休眠 return 出现以下错误:
org.hibernate.hql.internal.ast.QuerySyntaxException: T_token is not mapped [UPDATE T_token as a SET a.revocationReason = :reason WHERE a.id = :id]
所以我的问题是:是否可以以及如何将 java 泛型与 HQL 一起使用?
谢谢!
有可能
@Modifying
@Query("UPDATE #{#entityName} as a SET a.userRevocationReason = :reason WHERE a.refreshToken.id = :rid")
void revokeByRefreshToken (@Param("rid") T_id refreshTokenId, @Param("reason") UserRevocationReason userRevocationReason);
其中实体名称是 @Entity(name = "my_entit_name")
我有一个通用的 tokenRepository 接口:
public interface TokenRepository<T_Token extends Token, T_id> {
@Modifying
@Query("UPDATE T_token as a SET a.revocationReason = :reason WHERE a.id = :id")
void revokeByTokenId (@Param("id") T_id id, @Param("reason") RevocationReason revocationReason);
}
以及专门的存储库界面:
public interface CustomerTokenRepository extends Repository<CustomerToken, Long>, TokenRepository<CustomerToken, Long> {}
当我启动 Spring 启动应用程序时,休眠 return 出现以下错误:
org.hibernate.hql.internal.ast.QuerySyntaxException: T_token is not mapped [UPDATE T_token as a SET a.revocationReason = :reason WHERE a.id = :id]
所以我的问题是:是否可以以及如何将 java 泛型与 HQL 一起使用?
谢谢!
有可能
@Modifying
@Query("UPDATE #{#entityName} as a SET a.userRevocationReason = :reason WHERE a.refreshToken.id = :rid")
void revokeByRefreshToken (@Param("rid") T_id refreshTokenId, @Param("reason") UserRevocationReason userRevocationReason);
其中实体名称是 @Entity(name = "my_entit_name")