說我有一個@MappedSuperClass
這樣的:春數據JPA JPQL查詢父接口
@MappedSuperclass
public abstract class Rating
{
@Id
private Long id;
@Column(name="USER_ID")
private Long userId;
private int rating;
...
有了這樣
@Entity
@Table(name="ACTIVITY_RATING")
public class ActivityRating extends Rating
{
private Long activitySpecificData;
...
具體子實體然後有一個Spring數據JPA存儲庫這樣的:
@NoRepositoryBean
public interface RatingRepository<R extends Rating> extends JpaRepository<R, ID>
{
public List<R> findByUserId(Long userId);
...
這:
public interface ActivityRatingRepository extends RatingRepository<ActivityRating>
{
}
這一切的偉大工程,我可以調用任何特定的等級庫擴展RatingRepository
的findByUserId()
。我現在想要在RatingRepository
中編寫一些所有子接口都可以繼承的JPQL。我只是不知道在查詢中將FROM
放在什麼位置(或者甚至可能)。例如:
@Query("SELECT NEW com.foo.RatingCountVo(e.rating, COUNT(e.rating)) FROM ??????? e GROUP BY e.rating")
public List<RatingCountVo> getRatingCounts();
我可以將這個方法添加到每個擴展RatingRepository
但一切都將是除了特定的實體名稱完全相同的個體庫。如果我想更改查詢,那麼我必須去所有的子倉庫並單獨更新它們。我真的希望查詢生活在父類中,而不是重複。有什麼辦法可以做到這一點?
我目前使用spring-data-jpa 1.7.2和eclipselink 2.5.2。如有必要,我不一定反對切換到較新的版本。
這肯定的作品,但它確實還意味着其在所有子接口,而不是僅僅有一次父接口中的方法相同。 – dnc253
更新了我的答案 – asm0dey
完美!這正是我所追求的。 – dnc253