有没有一种方法可以在基本的引用接口上声明@Query,这样就不必在所有存储库中都声明它了?该查询在查询的“ FROM”部分中将具有不同的实体名称。
@MappedSuperclass
public abstract class BaseAction {
@Id
Long id;
...
}
@Entity
@Table(name="AKTION_EMAIL")
public class EmailAction extends BaseAction {
private String email;
}
public interface ActionRepository<T extends BaseAction> extends JpaRepository<T, ActionPK> {
@Query("SELECT max(seqNumber) + 1 FROM ????????????? e WHERE e.order = ?1 AND e.action = ?2")
Long findNextSeqNumberByOrderAndAction(Order order, ActionConfiguration action);
}
public interface EmailActionRepository extends ActionRepository<EmailAction> {
// This works, but I don't want to repeat that in all entity repositories...
@Query("SELECT max(seqNumber) + 1 FROM EmailAction e WHERE e.order = ?1 AND e.action = ?2")
Long findNextSeqNumberByOrderAndAction(Order order, ActionConfiguration action);
}
您可以在通用查询定义中使用SpEL表达式来引用未知实体类型:
interface ActionRepository<T extends BaseAction> extends JpaRepository<T, ActionPK> {
@Query("SELECT max(seqNumber) + 1 FROM #{#entityName} e WHERE …")
Long findNextSeqNumberByOrderAndAction(Order ActionConfiguration action);
}
注意我们如何#{#entityName}
动态插入将为其创建re存储库的实体的名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句